<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="zh">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.5"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>SWM34S_LVGL7.11_SWMUI: C:/Users/DELL/Desktop/Commit/lvgl/SWM34S_LVGL7.11_SWMUI_20230515/APP/Common Module/load_file.c 源文件</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr id="projectrow">
  <td id="projectalign">
   <div id="projectname">SWM34S_LVGL7.11_SWMUI<span id="projectnumber">&#160;V7.9</span>
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- 制作者 Doxygen 1.9.5 -->
<div id="nav-path" class="navpath">
  <ul>
<li class="navelem"><a class="el" href="dir_0ca16891106f5a3e9ad635a0d6c5f98f.html">APP</a></li><li class="navelem"><a class="el" href="dir_df4e0e4e72f77ab290fd1a24f190250a.html">Common Module</a></li>  </ul>
</div>
</div><!-- top -->
<div class="header">
  <div class="headertitle"><div class="title">load_file.c</div></div>
</div><!--header-->
<div class="contents">
<a href="load__file_8c.html">浏览该文件的文档.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno">    1</span> </div>
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno">   33</span><span class="preprocessor">#include &lt;string.h&gt;</span></div>
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno">   34</span><span class="preprocessor">#include &quot;<a class="code" href="load__file_8h.html">load_file.h</a>&quot;</span></div>
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno">   35</span> </div>
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno">   36</span><span class="preprocessor">#include &quot;lvgl.h&quot;</span></div>
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno">   37</span><span class="preprocessor">#include &quot;<a class="code" href="dev__jpeg_8h.html">dev_jpeg.h</a>&quot;</span></div>
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno">   38</span><span class="preprocessor">#include &quot;<a class="code" href="log_8h.html">log.h</a>&quot;</span></div>
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno">   39</span><span class="comment">// #include &quot;wav_parser.h&quot; /* WAV 文件解析(目前无必要加载音频至 SDRAM )*/</span></div>
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno">   40</span> </div>
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno">   41</span><span class="comment">/*******************************************************************************************************************************************</span></div>
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno">   42</span><span class="comment"> * Private Define</span></div>
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno">   43</span><span class="comment"> *******************************************************************************************************************************************/</span></div>
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"><a class="line" href="load__file_8c.html#a608709ede2a4b4c6197d01ec94ac8515">   44</a></span><span class="preprocessor">#define LF_DEBUG_ENABLE </span></div>
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno">   47</span><span class="preprocessor">#ifdef LF_DEBUG_ENABLE</span></div>
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"><a class="line" href="load__file_8c.html#a0a33935978fc635f5c600379478f7881">   48</a></span><span class="preprocessor">    #define LF_LOG(...)             LOG_INFO(__VA_ARGS__) </span><span class="comment">// printf(__VA_ARGS__)</span></div>
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno">   49</span> </div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno">   50</span><span class="preprocessor">#else</span></div>
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno">   51</span><span class="preprocessor">    #define LF_LOG(...)</span></div>
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno">   52</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno">   53</span>                                  </div>
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"><a class="line" href="load__file_8c.html#aa64097d14226626e813464d4b1db74fe">   55</a></span><span class="preprocessor">#define RW_CACHE_SIZE               (4096)</span></div>
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno">   56</span> </div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno">   57</span><span class="comment">/*******************************************************************************************************************************************</span></div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno">   58</span><span class="comment"> * Private Constant</span></div>
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno">   59</span><span class="comment"> *******************************************************************************************************************************************/</span></div>
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"><a class="line" href="load__file_8c.html#a158fc3faa30ddbece4360f3114710212">   61</a></span><span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code hl_variable" href="load__file_8c.html#a158fc3faa30ddbece4360f3114710212">Debug_FR_Table</a>[] =</div>
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno">   62</span>    {</div>
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno">   63</span>        <span class="stringliteral">&quot;FR_OK：成功&quot;</span>,                                           <span class="comment">// (0) Succeeded</span></div>
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno">   64</span>        <span class="stringliteral">&quot;FR_DISK_ERR：底层硬件错误&quot;</span>,                             <span class="comment">// (1) A hard error occurred in the low level disk I/O layer</span></div>
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno">   65</span>        <span class="stringliteral">&quot;FR_INT_ERR：断言失败&quot;</span>,                                  <span class="comment">// (2) Assertion failed</span></div>
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno">   66</span>        <span class="stringliteral">&quot;FR_NOT_READY：物理驱动没有工作&quot;</span>,                        <span class="comment">// (3) The physical drive cannot work</span></div>
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno">   67</span>        <span class="stringliteral">&quot;FR_NO_FILE：文件不存在&quot;</span>,                                <span class="comment">// (4) Could not find the file</span></div>
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno">   68</span>        <span class="stringliteral">&quot;FR_NO_PATH：路径不存在&quot;</span>,                                <span class="comment">// (5) Could not find the path</span></div>
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno">   69</span>        <span class="stringliteral">&quot;FR_INVALID_NAME：无效文件名&quot;</span>,                           <span class="comment">// (6) The path name format is invalid</span></div>
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno">   70</span>        <span class="stringliteral">&quot;FR_DENIED：由于禁止访问或者目录已满访问被拒绝&quot;</span>,         <span class="comment">// (7) Access denied due to prohibited access or directory full</span></div>
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno">   71</span>        <span class="stringliteral">&quot;FR_EXIST：由于访问被禁止访问被拒绝&quot;</span>,                    <span class="comment">// (8) Access denied due to prohibited access</span></div>
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno">   72</span>        <span class="stringliteral">&quot;FR_INVALID_OBJECT：文件或者目录对象无效&quot;</span>,               <span class="comment">// (9) The file/directory object is invalid</span></div>
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno">   73</span>        <span class="stringliteral">&quot;FR_WRITE_PROTECTED：物理驱动被写保护&quot;</span>,                  <span class="comment">// (10) The physical drive is write protected</span></div>
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno">   74</span>        <span class="stringliteral">&quot;FR_INVALID_DRIVE：逻辑驱动号无效&quot;</span>,                      <span class="comment">// (11) The logical drive number is invalid</span></div>
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno">   75</span>        <span class="stringliteral">&quot;FR_NOT_ENABLED：卷中无工作区&quot;</span>,                          <span class="comment">// (12) The volume has no work area</span></div>
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno">   76</span>        <span class="stringliteral">&quot;FR_NO_FILESYSTEM：没有有效的FAT卷&quot;</span>,                     <span class="comment">// (13) There is no valid FAT volume</span></div>
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno">   77</span>        <span class="stringliteral">&quot;FR_MKFS_ABORTED：由于参数错误f_mkfs()被终止&quot;</span>,           <span class="comment">// (14) The f_mkfs() aborted due to any parameter error</span></div>
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno">   78</span>        <span class="stringliteral">&quot;FR_TIMEOUT：在规定的时间内无法获得访问卷的许可&quot;</span>,        <span class="comment">// (15) Could not get a grant to access the volume within defined period</span></div>
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno">   79</span>        <span class="stringliteral">&quot;FR_LOCKED：由于文件共享策略操作被拒绝&quot;</span>,                 <span class="comment">// (16) The operation is rejected according to the file sharing policy</span></div>
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno">   80</span>        <span class="stringliteral">&quot;FR_NOT_ENOUGH_CORE：无法分配长文件名工作区&quot;</span>,            <span class="comment">// (17) LFN working buffer could not be allocated</span></div>
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno">   81</span>        <span class="stringliteral">&quot;FR_TOO_MANY_OPEN_FILES：当前打开的文件数大于_FS_SHARE&quot;</span>, <span class="comment">// (18) Number of open files &gt; _FS_SHARE</span></div>
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno">   82</span>        <span class="stringliteral">&quot;FR_INVALID_PARAMETER：参数无效&quot;</span>                         <span class="comment">// (19) Given parameter is invalid</span></div>
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno">   83</span>};</div>
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno">   84</span> </div>
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno">   85</span><span class="comment">/*******************************************************************************************************************************************</span></div>
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno">   86</span><span class="comment"> * Private Variable</span></div>
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno">   87</span><span class="comment"> *******************************************************************************************************************************************/</span></div>
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"><a class="line" href="load__file_8c.html#a8d34823bdbc6f49b3a7829f9161936e5">   91</a></span><span class="keyword">static</span> FATFS <a class="code hl_variable" href="load__file_8c.html#a8d34823bdbc6f49b3a7829f9161936e5">FatFs_Obj</a>[FF_VOLUMES];</div>
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno">   92</span> </div>
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"><a class="line" href="load__file_8c.html#a0180524d8dc0203e0b918e5834f69542">   94</a></span><span class="keyword">static</span> <span class="keywordtype">char</span> <a class="code hl_variable" href="load__file_8c.html#a0180524d8dc0203e0b918e5834f69542">Volume_Work</a>[FF_MAX_SS];</div>
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno">   95</span><span class="comment">//  static char Volume_Work[FF_VOLUMES][FF_MAX_SS];</span></div>
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno">   96</span> </div>
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno">   97</span><span class="comment">/*******************************************************************************************************************************************</span></div>
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno">   98</span><span class="comment"> * Public Constant</span></div>
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno">   99</span><span class="comment"> *******************************************************************************************************************************************/</span></div>
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno">  101</span><span class="preprocessor">#if (FF_STR_VOLUME_ID == 1)</span></div>
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno">  102</span><span class="keyword">const</span> <span class="keywordtype">char</span> *<span class="keyword">const</span> <a class="code hl_variable" href="load__file_8c.html#a08687ba7285d01a737a269b697bb661c">VolumeStr</a>[FF_VOLUMES] = {<span class="stringliteral">&quot;spi:&quot;</span>, <span class="stringliteral">&quot;sd:&quot;</span>, <span class="stringliteral">&quot;usb:&quot;</span>};</div>
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno">  103</span> </div>
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno">  104</span><span class="preprocessor">#elif (FF_STR_VOLUME_ID == 2)</span></div>
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno">  105</span><span class="keyword">const</span> <span class="keywordtype">char</span> *<span class="keyword">const</span> <a class="code hl_variable" href="load__file_8c.html#a08687ba7285d01a737a269b697bb661c">VolumeStr</a>[FF_VOLUMES] = {<span class="stringliteral">&quot;/spi/&quot;</span>, <span class="stringliteral">&quot;/sd/&quot;</span>, <span class="stringliteral">&quot;/usb/&quot;</span>};</div>
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno">  106</span> </div>
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno">  107</span><span class="preprocessor">#else </span><span class="comment">//(FF_STR_VOLUME_ID == 0 || FF_STR_VOLUME_ID &gt; 2)</span></div>
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"><a class="line" href="load__file_8c.html#a08687ba7285d01a737a269b697bb661c">  108</a></span><span class="keyword">const</span> <span class="keywordtype">char</span> *<span class="keyword">const</span> <a class="code hl_variable" href="load__file_8c.html#a08687ba7285d01a737a269b697bb661c">VolumeStr</a>[FF_VOLUMES] = {<span class="stringliteral">&quot;0:/&quot;</span>, <span class="stringliteral">&quot;1:/&quot;</span>, <span class="stringliteral">&quot;2:/&quot;</span>};</div>
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno">  109</span> </div>
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno">  110</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno">  111</span> </div>
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno">  112</span><span class="comment">/*******************************************************************************************************************************************</span></div>
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno">  113</span><span class="comment"> * Private Prototype</span></div>
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno">  114</span><span class="comment"> *******************************************************************************************************************************************/</span></div>
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno">  115</span><span class="keyword">static</span> uint8_t <a class="code hl_function" href="load__file_8c.html#a19787671d1d62339e0cf53a1b1f7ab98">load_to_sdram_image</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *src_path, <span class="keywordtype">void</span> *image, <span class="keywordtype">void</span> *(*ram_malloc)(<span class="keywordtype">size_t</span>));</div>
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno">  116</span><span class="keyword">static</span> uint8_t <a class="code hl_function" href="load__file_8c.html#af9dfd7a83175e3852794ad0cc1feffc3">load_to_sdram_bin</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *src_path, <span class="keywordtype">void</span> *bin, <span class="keywordtype">void</span> *(*ram_malloc)(<span class="keywordtype">size_t</span>));</div>
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno">  117</span><span class="comment">// static uint8_t load_to_sdram_music(const char *src_path, void *music, void *(*ram_malloc)(size_t));</span></div>
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno">  118</span> </div>
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno">  119</span><span class="comment">/*******************************************************************************************************************************************</span></div>
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno">  120</span><span class="comment"> * Public Function</span></div>
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno">  121</span><span class="comment"> *******************************************************************************************************************************************/</span></div>
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"><a class="line" href="load__file_8c.html#aebe4a0d647831986c734e1788150a064">  128</a></span>uint8_t <a class="code hl_function" href="load__file_8c.html#aebe4a0d647831986c734e1788150a064">fs_mount</a>(<a class="code hl_enumeration" href="load__file_8h.html#a44edb5dd69763758dda6af4dd162c997">disk_t</a> disk)</div>
<div class="line"><a id="l00129" name="l00129"></a><span class="lineno">  129</span>{</div>
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno">  130</span>    uint8_t res = f_mount(&amp;<a class="code hl_variable" href="load__file_8c.html#a8d34823bdbc6f49b3a7829f9161936e5">FatFs_Obj</a>[disk], <a class="code hl_variable" href="load__file_8c.html#a08687ba7285d01a737a269b697bb661c">VolumeStr</a>[disk], 1);</div>
<div class="line"><a id="l00131" name="l00131"></a><span class="lineno">  131</span><span class="preprocessor">#if 1</span></div>
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno">  132</span>    <span class="keywordflow">if</span> (FR_NO_FILESYSTEM == res)</div>
<div class="line"><a id="l00133" name="l00133"></a><span class="lineno">  133</span>    {</div>
<div class="line"><a id="l00134" name="l00134"></a><span class="lineno">  134</span>        <span class="comment">/* 常见异常处理-重设 MBR/DPT/DBR 扇区通常都能解决，否则请排查硬件与驱动 */</span></div>
<div class="line"><a id="l00135" name="l00135"></a><span class="lineno">  135</span>        res = <a class="code hl_function" href="load__file_8c.html#a2826c976bae07983300096521da284b4">fs_unmount</a>(disk);</div>
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno">  136</span>        res = <a class="code hl_function" href="load__file_8c.html#a51d572edecc93d80a160b93843fb5208">fs_mkfs</a>(disk);</div>
<div class="line"><a id="l00137" name="l00137"></a><span class="lineno">  137</span>        res = f_mount(&amp;<a class="code hl_variable" href="load__file_8c.html#a8d34823bdbc6f49b3a7829f9161936e5">FatFs_Obj</a>[disk], <a class="code hl_variable" href="load__file_8c.html#a08687ba7285d01a737a269b697bb661c">VolumeStr</a>[disk], 1);</div>
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno">  138</span>        <span class="comment">/* 注意: 新建卷后, 磁盘原有数据会被标记为脏值 -&gt; 清空 */</span></div>
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno">  139</span>    }</div>
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno">  140</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00141" name="l00141"></a><span class="lineno">  141</span>    <span class="keywordflow">return</span> res;</div>
<div class="line"><a id="l00142" name="l00142"></a><span class="lineno">  142</span>}</div>
<div class="line"><a id="l00143" name="l00143"></a><span class="lineno">  143</span> </div>
<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"><a class="line" href="load__file_8c.html#a2826c976bae07983300096521da284b4">  150</a></span>uint8_t <a class="code hl_function" href="load__file_8c.html#a2826c976bae07983300096521da284b4">fs_unmount</a>(<a class="code hl_enumeration" href="load__file_8h.html#a44edb5dd69763758dda6af4dd162c997">disk_t</a> disk)</div>
<div class="line"><a id="l00151" name="l00151"></a><span class="lineno">  151</span>{</div>
<div class="line"><a id="l00152" name="l00152"></a><span class="lineno">  152</span>    <span class="keywordflow">return</span> f_unmount(<a class="code hl_variable" href="load__file_8c.html#a08687ba7285d01a737a269b697bb661c">VolumeStr</a>[disk]);</div>
<div class="line"><a id="l00153" name="l00153"></a><span class="lineno">  153</span>}</div>
<div class="line"><a id="l00154" name="l00154"></a><span class="lineno">  154</span> </div>
<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"><a class="line" href="load__file_8c.html#a51d572edecc93d80a160b93843fb5208">  162</a></span>uint8_t <a class="code hl_function" href="load__file_8c.html#a51d572edecc93d80a160b93843fb5208">fs_mkfs</a>(<a class="code hl_enumeration" href="load__file_8h.html#a44edb5dd69763758dda6af4dd162c997">disk_t</a> disk)</div>
<div class="line"><a id="l00163" name="l00163"></a><span class="lineno">  163</span>{</div>
<div class="line"><a id="l00164" name="l00164"></a><span class="lineno">  164</span>    <span class="keywordflow">return</span> f_mkfs(<a class="code hl_variable" href="load__file_8c.html#a08687ba7285d01a737a269b697bb661c">VolumeStr</a>[disk], NULL, <a class="code hl_variable" href="load__file_8c.html#a0180524d8dc0203e0b918e5834f69542">Volume_Work</a>, <span class="keyword">sizeof</span>(<a class="code hl_variable" href="load__file_8c.html#a0180524d8dc0203e0b918e5834f69542">Volume_Work</a>));</div>
<div class="line"><a id="l00165" name="l00165"></a><span class="lineno">  165</span>}</div>
<div class="line"><a id="l00166" name="l00166"></a><span class="lineno">  166</span> </div>
<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"><a class="line" href="load__file_8c.html#a054ac4b07b339f1cda65d041546a46f2">  180</a></span>uint8_t <a class="code hl_function" href="load__file_8c.html#a054ac4b07b339f1cda65d041546a46f2">copy_file</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *src_path, <span class="keyword">const</span> <span class="keywordtype">char</span> *dst_path)</div>
<div class="line"><a id="l00181" name="l00181"></a><span class="lineno">  181</span>{</div>
<div class="line"><a id="l00182" name="l00182"></a><span class="lineno">  182</span>    uint8_t res = 0;                      <span class="comment">// 返回值</span></div>
<div class="line"><a id="l00183" name="l00183"></a><span class="lineno">  183</span>    FIL src_file, dst_file;               <span class="comment">// 文件句柄</span></div>
<div class="line"><a id="l00184" name="l00184"></a><span class="lineno">  184</span>    uint32_t read_len = 0, write_len = 0; <span class="comment">// 读 | 写字节数</span></div>
<div class="line"><a id="l00185" name="l00185"></a><span class="lineno">  185</span>    uint8_t temp_buff[<a class="code hl_define" href="load__file_8c.html#aa64097d14226626e813464d4b1db74fe">RW_CACHE_SIZE</a>];     <span class="comment">// 读 | 写缓冲区</span></div>
<div class="line"><a id="l00186" name="l00186"></a><span class="lineno">  186</span> </div>
<div class="line"><a id="l00187" name="l00187"></a><span class="lineno">  187</span>    <span class="keywordflow">if</span> (NULL == src_path || NULL == dst_path)</div>
<div class="line"><a id="l00188" name="l00188"></a><span class="lineno">  188</span>    {</div>
<div class="line"><a id="l00189" name="l00189"></a><span class="lineno">  189</span>        <a class="code hl_define" href="load__file_8c.html#a0a33935978fc635f5c600379478f7881">LF_LOG</a>(<span class="stringliteral">&quot;[Assert] : [Path_Src] = [%s], [Path_Dst] = [%s]\r\n&quot;</span>,</div>
<div class="line"><a id="l00190" name="l00190"></a><span class="lineno">  190</span>               (NULL == src_path) ? <span class="stringliteral">&quot;no exist&quot;</span> : src_path,</div>
<div class="line"><a id="l00191" name="l00191"></a><span class="lineno">  191</span>               (NULL == dst_path) ? <span class="stringliteral">&quot;no exist&quot;</span> : dst_path);</div>
<div class="line"><a id="l00192" name="l00192"></a><span class="lineno">  192</span>        <span class="keywordflow">return</span> 1; <span class="comment">// Assert</span></div>
<div class="line"><a id="l00193" name="l00193"></a><span class="lineno">  193</span>    }</div>
<div class="line"><a id="l00194" name="l00194"></a><span class="lineno">  194</span> </div>
<div class="line"><a id="l00195" name="l00195"></a><span class="lineno">  195</span>    <span class="comment">//  FA_CREATE_ALWAYS : 创建一个新文件，如果文件已存在，则它将被截断并覆盖</span></div>
<div class="line"><a id="l00196" name="l00196"></a><span class="lineno">  196</span>    <span class="comment">//  FA_OPEN_ALWAYS   : 如果文件存在，则打开；否则，创建一个新文件</span></div>
<div class="line"><a id="l00197" name="l00197"></a><span class="lineno">  197</span>    <span class="comment">//  FA_OPEN_EXISTING : 打开一个文件。如果文件不存在，该函数将失败</span></div>
<div class="line"><a id="l00198" name="l00198"></a><span class="lineno">  198</span>    res = f_open(&amp;src_file, src_path, FA_READ | FA_OPEN_EXISTING);</div>
<div class="line"><a id="l00199" name="l00199"></a><span class="lineno">  199</span>    <span class="keywordflow">if</span> (FR_OK != res)</div>
<div class="line"><a id="l00200" name="l00200"></a><span class="lineno">  200</span>    {</div>
<div class="line"><a id="l00201" name="l00201"></a><span class="lineno">  201</span>        <a class="code hl_define" href="load__file_8c.html#a0a33935978fc635f5c600379478f7881">LF_LOG</a>(<span class="stringliteral">&quot;[%s] file [f_open] = [%s]\r\n&quot;</span>, src_path, <a class="code hl_variable" href="load__file_8c.html#a158fc3faa30ddbece4360f3114710212">Debug_FR_Table</a>[res]);</div>
<div class="line"><a id="l00202" name="l00202"></a><span class="lineno">  202</span>        <span class="keywordflow">return</span> res;</div>
<div class="line"><a id="l00203" name="l00203"></a><span class="lineno">  203</span>    }</div>
<div class="line"><a id="l00204" name="l00204"></a><span class="lineno">  204</span>    res = f_open(&amp;dst_file, dst_path, FA_WRITE | FA_OPEN_ALWAYS);</div>
<div class="line"><a id="l00205" name="l00205"></a><span class="lineno">  205</span>    <span class="keywordflow">if</span> (FR_OK != res)</div>
<div class="line"><a id="l00206" name="l00206"></a><span class="lineno">  206</span>    {</div>
<div class="line"><a id="l00207" name="l00207"></a><span class="lineno">  207</span>        f_close(&amp;src_file);</div>
<div class="line"><a id="l00208" name="l00208"></a><span class="lineno">  208</span>        <a class="code hl_define" href="load__file_8c.html#a0a33935978fc635f5c600379478f7881">LF_LOG</a>(<span class="stringliteral">&quot;[%s] file [f_open] = [%s]\r\n&quot;</span>, dst_path, <a class="code hl_variable" href="load__file_8c.html#a158fc3faa30ddbece4360f3114710212">Debug_FR_Table</a>[res]);</div>
<div class="line"><a id="l00209" name="l00209"></a><span class="lineno">  209</span>        <span class="keywordflow">return</span> res;</div>
<div class="line"><a id="l00210" name="l00210"></a><span class="lineno">  210</span>    }</div>
<div class="line"><a id="l00211" name="l00211"></a><span class="lineno">  211</span>    <span class="comment">// 文件光标定位</span></div>
<div class="line"><a id="l00212" name="l00212"></a><span class="lineno">  212</span>    f_lseek(&amp;src_file, 0);</div>
<div class="line"><a id="l00213" name="l00213"></a><span class="lineno">  213</span>    f_lseek(&amp;dst_file, 0);</div>
<div class="line"><a id="l00214" name="l00214"></a><span class="lineno">  214</span> </div>
<div class="line"><a id="l00215" name="l00215"></a><span class="lineno">  215</span><span class="preprocessor">#if 1 </span><span class="comment">/* 1 - 优化为连续块   0 - 普适拷贝 */</span><span class="preprocessor"></span></div>
<div class="line"><a id="l00216" name="l00216"></a><span class="lineno">  216</span> </div>
<div class="line"><a id="l00217" name="l00217"></a><span class="lineno">  217</span>    <span class="comment">// 连续文件对于时间要求严格的读/写操作具有优势, 它消除了因随机访问碎片文件而导致的文件系统和存储设备中的一些开销</span></div>
<div class="line"><a id="l00218" name="l00218"></a><span class="lineno">  218</span>    <span class="comment">// 先将文件大小截断为当前文件读/写指针 (f_expand 的必要前提)</span></div>
<div class="line"><a id="l00219" name="l00219"></a><span class="lineno">  219</span>    res = f_truncate(&amp;dst_file);</div>
<div class="line"><a id="l00220" name="l00220"></a><span class="lineno">  220</span>    <span class="keywordflow">if</span> (FR_OK != res)</div>
<div class="line"><a id="l00221" name="l00221"></a><span class="lineno">  221</span>    {</div>
<div class="line"><a id="l00222" name="l00222"></a><span class="lineno">  222</span>        <a class="code hl_define" href="load__file_8c.html#a0a33935978fc635f5c600379478f7881">LF_LOG</a>(<span class="stringliteral">&quot;[%s] file [f_truncate] Failed result = [%s]&quot;</span>, dst_path, <a class="code hl_variable" href="load__file_8c.html#a158fc3faa30ddbece4360f3114710212">Debug_FR_Table</a>[res]);</div>
<div class="line"><a id="l00223" name="l00223"></a><span class="lineno">  223</span>        <span class="keywordflow">goto</span> close_copy_file;</div>
<div class="line"><a id="l00224" name="l00224"></a><span class="lineno">  224</span>    }</div>
<div class="line"><a id="l00225" name="l00225"></a><span class="lineno">  225</span>    <span class="comment">// 为文件准备或分配一个连续的数据区域</span></div>
<div class="line"><a id="l00226" name="l00226"></a><span class="lineno">  226</span>    res = f_expand(&amp;dst_file, f_size(&amp;src_file), 1);</div>
<div class="line"><a id="l00227" name="l00227"></a><span class="lineno">  227</span>    <span class="keywordflow">if</span> (FR_OK != res)</div>
<div class="line"><a id="l00228" name="l00228"></a><span class="lineno">  228</span>    {</div>
<div class="line"><a id="l00229" name="l00229"></a><span class="lineno">  229</span>        <a class="code hl_define" href="load__file_8c.html#a0a33935978fc635f5c600379478f7881">LF_LOG</a>(<span class="stringliteral">&quot;[%s] file [f_expand] Failed result = [%s]&quot;</span>, dst_path, <a class="code hl_variable" href="load__file_8c.html#a158fc3faa30ddbece4360f3114710212">Debug_FR_Table</a>[res]);</div>
<div class="line"><a id="l00230" name="l00230"></a><span class="lineno">  230</span> </div>
<div class="line"><a id="l00231" name="l00231"></a><span class="lineno">  231</span>        <span class="comment">// 若失败则尝试进行普通分配, 若仍然失败, 则表示磁盘已满</span></div>
<div class="line"><a id="l00232" name="l00232"></a><span class="lineno">  232</span>        f_close(&amp;dst_file);</div>
<div class="line"><a id="l00233" name="l00233"></a><span class="lineno">  233</span>        f_unlink(dst_path);</div>
<div class="line"><a id="l00234" name="l00234"></a><span class="lineno">  234</span>        res = f_open(&amp;dst_file, dst_path, FA_WRITE | FA_OPEN_ALWAYS);</div>
<div class="line"><a id="l00235" name="l00235"></a><span class="lineno">  235</span>        <span class="keywordflow">if</span> (FR_OK != res)</div>
<div class="line"><a id="l00236" name="l00236"></a><span class="lineno">  236</span>        {</div>
<div class="line"><a id="l00237" name="l00237"></a><span class="lineno">  237</span>            <a class="code hl_define" href="load__file_8c.html#a0a33935978fc635f5c600379478f7881">LF_LOG</a>(<span class="stringliteral">&quot;[%s] file [f_open] = [%s]\r\n&quot;</span>, dst_path, <a class="code hl_variable" href="load__file_8c.html#a158fc3faa30ddbece4360f3114710212">Debug_FR_Table</a>[res]);</div>
<div class="line"><a id="l00238" name="l00238"></a><span class="lineno">  238</span>            <span class="keywordflow">goto</span> close_copy_file;</div>
<div class="line"><a id="l00239" name="l00239"></a><span class="lineno">  239</span>        }</div>
<div class="line"><a id="l00240" name="l00240"></a><span class="lineno">  240</span>    }</div>
<div class="line"><a id="l00241" name="l00241"></a><span class="lineno">  241</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00242" name="l00242"></a><span class="lineno">  242</span> </div>
<div class="line"><a id="l00243" name="l00243"></a><span class="lineno">  243</span>    <span class="keywordflow">while</span> (FR_OK == res) <span class="comment">// 文件拷贝开始</span></div>
<div class="line"><a id="l00244" name="l00244"></a><span class="lineno">  244</span>    {</div>
<div class="line"><a id="l00245" name="l00245"></a><span class="lineno">  245</span>        res = f_read(&amp;src_file, temp_buff, <span class="keyword">sizeof</span>(temp_buff), &amp;read_len);</div>
<div class="line"><a id="l00246" name="l00246"></a><span class="lineno">  246</span>        <span class="keywordflow">if</span> (FR_OK != res || read_len == 0) <span class="comment">// 读取文件失败 或者 已读到文件结尾</span></div>
<div class="line"><a id="l00247" name="l00247"></a><span class="lineno">  247</span>        {</div>
<div class="line"><a id="l00248" name="l00248"></a><span class="lineno">  248</span>            <span class="comment">// LF_LOG(&quot;[%s] last read_len = [%d] \r\n possible reason: [%s] file read over!\r\n&quot;, src_path, read_len, Debug_FR_Table[res]);</span></div>
<div class="line"><a id="l00249" name="l00249"></a><span class="lineno">  249</span>            <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l00250" name="l00250"></a><span class="lineno">  250</span>        }</div>
<div class="line"><a id="l00251" name="l00251"></a><span class="lineno">  251</span>        res = f_write(&amp;dst_file, temp_buff, read_len, &amp;write_len);</div>
<div class="line"><a id="l00252" name="l00252"></a><span class="lineno">  252</span>        <span class="keywordflow">if</span> (write_len &lt; read_len) <span class="comment">// 最后一次写入不完整 : 大概率是磁盘已满</span></div>
<div class="line"><a id="l00253" name="l00253"></a><span class="lineno">  253</span>        {</div>
<div class="line"><a id="l00254" name="l00254"></a><span class="lineno">  254</span>            res = FR_DENIED;</div>
<div class="line"><a id="l00255" name="l00255"></a><span class="lineno">  255</span>            <a class="code hl_define" href="load__file_8c.html#a0a33935978fc635f5c600379478f7881">LF_LOG</a>(<span class="stringliteral">&quot;[%s] file last [read_len] = [%d], [write_len] = [%d], result = [%s]\r\n&quot;</span>,</div>
<div class="line"><a id="l00256" name="l00256"></a><span class="lineno">  256</span>                   dst_path, read_len, write_len, <a class="code hl_variable" href="load__file_8c.html#a158fc3faa30ddbece4360f3114710212">Debug_FR_Table</a>[res]);</div>
<div class="line"><a id="l00257" name="l00257"></a><span class="lineno">  257</span>            <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l00258" name="l00258"></a><span class="lineno">  258</span>        }</div>
<div class="line"><a id="l00259" name="l00259"></a><span class="lineno">  259</span>    }</div>
<div class="line"><a id="l00260" name="l00260"></a><span class="lineno">  260</span>close_copy_file:</div>
<div class="line"><a id="l00261" name="l00261"></a><span class="lineno">  261</span>    f_close(&amp;src_file);</div>
<div class="line"><a id="l00262" name="l00262"></a><span class="lineno">  262</span>    f_close(&amp;dst_file);</div>
<div class="line"><a id="l00263" name="l00263"></a><span class="lineno">  263</span>    <span class="comment">// 出现错误则删除创建的目标文件, 必须先关闭文件, 否则 f_unlink 将被拒绝</span></div>
<div class="line"><a id="l00264" name="l00264"></a><span class="lineno">  264</span>    <span class="keywordflow">if</span> (FR_OK != res)</div>
<div class="line"><a id="l00265" name="l00265"></a><span class="lineno">  265</span>    {</div>
<div class="line"><a id="l00266" name="l00266"></a><span class="lineno">  266</span>        <span class="comment">/*res = */</span> f_unlink(dst_path); <span class="comment">// 避免覆盖 res , 抛出原有错误</span></div>
<div class="line"><a id="l00267" name="l00267"></a><span class="lineno">  267</span>    }</div>
<div class="line"><a id="l00268" name="l00268"></a><span class="lineno">  268</span>    <span class="keywordflow">return</span> res;</div>
<div class="line"><a id="l00269" name="l00269"></a><span class="lineno">  269</span>}</div>
<div class="line"><a id="l00270" name="l00270"></a><span class="lineno">  270</span> </div>
<div class="line"><a id="l00289" name="l00289"></a><span class="lineno"><a class="line" href="load__file_8c.html#a2efc2116dbabe389a95c812f9dc6aa03">  289</a></span>uint8_t <a class="code hl_function" href="load__file_8c.html#a2efc2116dbabe389a95c812f9dc6aa03">load_source_to_sdram</a>(<a class="code hl_enumeration" href="load__file_8h.html#a44edb5dd69763758dda6af4dd162c997">disk_t</a> disk, <span class="keyword">const</span> <span class="keywordtype">char</span> *path, <a class="code hl_enumeration" href="load__file_8h.html#a044f73b36811553cd877767a7df11f83">resource_t</a> type, <span class="keywordtype">void</span> *res_struct, <span class="keywordtype">void</span> *(*ram_malloc)(<span class="keywordtype">size_t</span>))</div>
<div class="line"><a id="l00290" name="l00290"></a><span class="lineno">  290</span>{</div>
<div class="line"><a id="l00291" name="l00291"></a><span class="lineno">  291</span>    <span class="keywordtype">char</span> f_path[FF_MAX_LFN];</div>
<div class="line"><a id="l00292" name="l00292"></a><span class="lineno">  292</span>    strcpy(f_path, <a class="code hl_variable" href="load__file_8c.html#a08687ba7285d01a737a269b697bb661c">VolumeStr</a>[disk]);</div>
<div class="line"><a id="l00293" name="l00293"></a><span class="lineno">  293</span>    strcat(f_path, path);</div>
<div class="line"><a id="l00294" name="l00294"></a><span class="lineno">  294</span>    <span class="comment">// 根据文件类型来选择对应执行函数</span></div>
<div class="line"><a id="l00295" name="l00295"></a><span class="lineno">  295</span>    <span class="keywordflow">switch</span> (type)</div>
<div class="line"><a id="l00296" name="l00296"></a><span class="lineno">  296</span>    {</div>
<div class="line"><a id="l00297" name="l00297"></a><span class="lineno">  297</span>    <span class="keywordflow">case</span> (<a class="code hl_enumvalue" href="load__file_8h.html#a044f73b36811553cd877767a7df11f83a1e00c983d4be44226a3b1ba10382e3e9">IMG</a>):</div>
<div class="line"><a id="l00298" name="l00298"></a><span class="lineno">  298</span>        <span class="keywordflow">return</span> <a class="code hl_function" href="load__file_8c.html#a19787671d1d62339e0cf53a1b1f7ab98">load_to_sdram_image</a>(f_path, res_struct, ram_malloc);</div>
<div class="line"><a id="l00299" name="l00299"></a><span class="lineno">  299</span> </div>
<div class="line"><a id="l00300" name="l00300"></a><span class="lineno">  300</span>    <span class="keywordflow">case</span> (<a class="code hl_enumvalue" href="load__file_8h.html#a044f73b36811553cd877767a7df11f83a3dba92f17ebb0d7efe6056d51e9acdc7">BIN</a>):</div>
<div class="line"><a id="l00301" name="l00301"></a><span class="lineno">  301</span>        <span class="keywordflow">return</span> <a class="code hl_function" href="load__file_8c.html#af9dfd7a83175e3852794ad0cc1feffc3">load_to_sdram_bin</a>(f_path, res_struct, ram_malloc);</div>
<div class="line"><a id="l00302" name="l00302"></a><span class="lineno">  302</span> </div>
<div class="line"><a id="l00303" name="l00303"></a><span class="lineno">  303</span>    <span class="keywordflow">case</span> (<a class="code hl_enumvalue" href="load__file_8h.html#a044f73b36811553cd877767a7df11f83ab22456aa73d7862a07ffbc9117324f3e">WAV</a>):</div>
<div class="line"><a id="l00304" name="l00304"></a><span class="lineno">  304</span>        <a class="code hl_define" href="load__file_8c.html#a0a33935978fc635f5c600379478f7881">LF_LOG</a>(<span class="stringliteral">&quot;It is unnecessary to load the music source into sdram\r\n&quot;</span>);</div>
<div class="line"><a id="l00305" name="l00305"></a><span class="lineno">  305</span>        <span class="keywordflow">break</span>; <span class="comment">// return load_to_sdram_music(path, res_struct, ram_malloc);</span></div>
<div class="line"><a id="l00306" name="l00306"></a><span class="lineno">  306</span> </div>
<div class="line"><a id="l00307" name="l00307"></a><span class="lineno">  307</span>    <span class="keywordflow">case</span> (<a class="code hl_enumvalue" href="load__file_8h.html#a044f73b36811553cd877767a7df11f83a2db6506cbb3a11215ddceb3db9c4502b">AVI</a>):</div>
<div class="line"><a id="l00308" name="l00308"></a><span class="lineno">  308</span>        <a class="code hl_define" href="load__file_8c.html#a0a33935978fc635f5c600379478f7881">LF_LOG</a>(<span class="stringliteral">&quot;It is unnecessary to load the video source into sdram\r\n&quot;</span>);</div>
<div class="line"><a id="l00309" name="l00309"></a><span class="lineno">  309</span>        <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l00310" name="l00310"></a><span class="lineno">  310</span>    <span class="keywordflow">default</span>:</div>
<div class="line"><a id="l00311" name="l00311"></a><span class="lineno">  311</span>        <a class="code hl_define" href="load__file_8c.html#a0a33935978fc635f5c600379478f7881">LF_LOG</a>(<span class="stringliteral">&quot;The File_Type is unknown other = [%d]\r\n&quot;</span>, type);</div>
<div class="line"><a id="l00312" name="l00312"></a><span class="lineno">  312</span>        <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l00313" name="l00313"></a><span class="lineno">  313</span>    }</div>
<div class="line"><a id="l00314" name="l00314"></a><span class="lineno">  314</span>    <span class="keywordflow">return</span> 1;</div>
<div class="line"><a id="l00315" name="l00315"></a><span class="lineno">  315</span>}</div>
<div class="line"><a id="l00316" name="l00316"></a><span class="lineno">  316</span> </div>
<div class="line"><a id="l00332" name="l00332"></a><span class="lineno"><a class="line" href="load__file_8c.html#a62a6b593e3ff4f0f2c1b13773df449b0">  332</a></span>uint8_t <a class="code hl_function" href="load__file_8c.html#a62a6b593e3ff4f0f2c1b13773df449b0">remove_source_to_sdram</a>(<a class="code hl_enumeration" href="load__file_8h.html#a044f73b36811553cd877767a7df11f83">resource_t</a> type, <span class="keywordtype">void</span> *source, uint8_t (*ram_free)(<span class="keywordtype">void</span> *))</div>
<div class="line"><a id="l00333" name="l00333"></a><span class="lineno">  333</span>{</div>
<div class="line"><a id="l00334" name="l00334"></a><span class="lineno">  334</span>    uint8_t res = 0;</div>
<div class="line"><a id="l00335" name="l00335"></a><span class="lineno">  335</span>    <span class="comment">// 根据文件类型来选择对应执行函数</span></div>
<div class="line"><a id="l00336" name="l00336"></a><span class="lineno">  336</span>    <span class="keywordflow">switch</span> (type)</div>
<div class="line"><a id="l00337" name="l00337"></a><span class="lineno">  337</span>    {</div>
<div class="line"><a id="l00338" name="l00338"></a><span class="lineno">  338</span>    <span class="keywordflow">case</span> (<a class="code hl_enumvalue" href="load__file_8h.html#a044f73b36811553cd877767a7df11f83a1e00c983d4be44226a3b1ba10382e3e9">IMG</a>):</div>
<div class="line"><a id="l00339" name="l00339"></a><span class="lineno">  339</span>    {</div>
<div class="line"><a id="l00340" name="l00340"></a><span class="lineno">  340</span>        lv_img_dsc_t *img = (lv_img_dsc_t *)source;</div>
<div class="line"><a id="l00341" name="l00341"></a><span class="lineno">  341</span>        res = ram_free((<span class="keywordtype">void</span> *)(img-&gt;data));</div>
<div class="line"><a id="l00342" name="l00342"></a><span class="lineno">  342</span>        <span class="keywordflow">if</span> (res == 0)</div>
<div class="line"><a id="l00343" name="l00343"></a><span class="lineno">  343</span>        {</div>
<div class="line"><a id="l00344" name="l00344"></a><span class="lineno">  344</span>            <span class="comment">// memset(img, 0, sizeof(lv_img_dsc_t));</span></div>
<div class="line"><a id="l00345" name="l00345"></a><span class="lineno">  345</span>        }</div>
<div class="line"><a id="l00346" name="l00346"></a><span class="lineno">  346</span>        <span class="keywordflow">return</span> res;</div>
<div class="line"><a id="l00347" name="l00347"></a><span class="lineno">  347</span>    }</div>
<div class="line"><a id="l00348" name="l00348"></a><span class="lineno">  348</span> </div>
<div class="line"><a id="l00349" name="l00349"></a><span class="lineno">  349</span>    <span class="keywordflow">case</span> (<a class="code hl_enumvalue" href="load__file_8h.html#a044f73b36811553cd877767a7df11f83a3dba92f17ebb0d7efe6056d51e9acdc7">BIN</a>):</div>
<div class="line"><a id="l00350" name="l00350"></a><span class="lineno">  350</span>    {</div>
<div class="line"><a id="l00351" name="l00351"></a><span class="lineno">  351</span>        uint32_t *font_addr = (uint32_t *)source;</div>
<div class="line"><a id="l00352" name="l00352"></a><span class="lineno">  352</span>        res = ram_free((<span class="keywordtype">void</span> *)(*font_addr));</div>
<div class="line"><a id="l00353" name="l00353"></a><span class="lineno">  353</span>        <span class="keywordflow">if</span> (res == 0)</div>
<div class="line"><a id="l00354" name="l00354"></a><span class="lineno">  354</span>        {</div>
<div class="line"><a id="l00355" name="l00355"></a><span class="lineno">  355</span>            <span class="comment">//*font_addr = 0;</span></div>
<div class="line"><a id="l00356" name="l00356"></a><span class="lineno">  356</span>        }</div>
<div class="line"><a id="l00357" name="l00357"></a><span class="lineno">  357</span>        <span class="keywordflow">return</span> res;</div>
<div class="line"><a id="l00358" name="l00358"></a><span class="lineno">  358</span>    }</div>
<div class="line"><a id="l00359" name="l00359"></a><span class="lineno">  359</span> </div>
<div class="line"><a id="l00360" name="l00360"></a><span class="lineno">  360</span>    <span class="keywordflow">case</span> (<a class="code hl_enumvalue" href="load__file_8h.html#a044f73b36811553cd877767a7df11f83ab22456aa73d7862a07ffbc9117324f3e">WAV</a>):</div>
<div class="line"><a id="l00361" name="l00361"></a><span class="lineno">  361</span>    {</div>
<div class="line"><a id="l00362" name="l00362"></a><span class="lineno">  362</span>        <a class="code hl_define" href="load__file_8c.html#a0a33935978fc635f5c600379478f7881">LF_LOG</a>(<span class="stringliteral">&quot;It is unnecessary to load the music source into sdram\r\n&quot;</span>);</div>
<div class="line"><a id="l00363" name="l00363"></a><span class="lineno">  363</span>        <span class="comment">// wav_struct_t *wav_struct = (wav_struct_t *)source;</span></div>
<div class="line"><a id="l00364" name="l00364"></a><span class="lineno">  364</span>        <span class="keywordflow">break</span>; <span class="comment">// return ram_free(source);</span></div>
<div class="line"><a id="l00365" name="l00365"></a><span class="lineno">  365</span>    }</div>
<div class="line"><a id="l00366" name="l00366"></a><span class="lineno">  366</span> </div>
<div class="line"><a id="l00367" name="l00367"></a><span class="lineno">  367</span>    <span class="keywordflow">case</span> (<a class="code hl_enumvalue" href="load__file_8h.html#a044f73b36811553cd877767a7df11f83a2db6506cbb3a11215ddceb3db9c4502b">AVI</a>):</div>
<div class="line"><a id="l00368" name="l00368"></a><span class="lineno">  368</span>    {</div>
<div class="line"><a id="l00369" name="l00369"></a><span class="lineno">  369</span>        <a class="code hl_define" href="load__file_8c.html#a0a33935978fc635f5c600379478f7881">LF_LOG</a>(<span class="stringliteral">&quot;It is unnecessary to load the video source into sdram\r\n&quot;</span>);</div>
<div class="line"><a id="l00370" name="l00370"></a><span class="lineno">  370</span>        <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l00371" name="l00371"></a><span class="lineno">  371</span>    }</div>
<div class="line"><a id="l00372" name="l00372"></a><span class="lineno">  372</span>    <span class="keywordflow">default</span>:</div>
<div class="line"><a id="l00373" name="l00373"></a><span class="lineno">  373</span>    {</div>
<div class="line"><a id="l00374" name="l00374"></a><span class="lineno">  374</span>        <a class="code hl_define" href="load__file_8c.html#a0a33935978fc635f5c600379478f7881">LF_LOG</a>(<span class="stringliteral">&quot;The File_Type is unknown other = [%d]\r\n&quot;</span>, type);</div>
<div class="line"><a id="l00375" name="l00375"></a><span class="lineno">  375</span>        <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l00376" name="l00376"></a><span class="lineno">  376</span>    }</div>
<div class="line"><a id="l00377" name="l00377"></a><span class="lineno">  377</span>    }</div>
<div class="line"><a id="l00378" name="l00378"></a><span class="lineno">  378</span>    <span class="keywordflow">return</span> 1;</div>
<div class="line"><a id="l00379" name="l00379"></a><span class="lineno">  379</span>}</div>
<div class="line"><a id="l00380" name="l00380"></a><span class="lineno">  380</span> </div>
<div class="line"><a id="l00381" name="l00381"></a><span class="lineno">  381</span><span class="comment">/*******************************************************************************************************************************************</span></div>
<div class="line"><a id="l00382" name="l00382"></a><span class="lineno">  382</span><span class="comment"> * Private Function</span></div>
<div class="line"><a id="l00383" name="l00383"></a><span class="lineno">  383</span><span class="comment"> *******************************************************************************************************************************************/</span></div>
<div class="line"><a id="l00392" name="l00392"></a><span class="lineno"><a class="line" href="load__file_8c.html#a19787671d1d62339e0cf53a1b1f7ab98">  392</a></span><span class="keyword">static</span> uint8_t <a class="code hl_function" href="load__file_8c.html#a19787671d1d62339e0cf53a1b1f7ab98">load_to_sdram_image</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *src_path, <span class="keywordtype">void</span> *image, <span class="keywordtype">void</span> *(*ram_malloc)(<span class="keywordtype">size_t</span>))</div>
<div class="line"><a id="l00393" name="l00393"></a><span class="lineno">  393</span>{</div>
<div class="line"><a id="l00394" name="l00394"></a><span class="lineno">  394</span>    uint32_t i = 0;</div>
<div class="line"><a id="l00395" name="l00395"></a><span class="lineno">  395</span>    FIL file;               <span class="comment">// 文件句柄</span></div>
<div class="line"><a id="l00396" name="l00396"></a><span class="lineno">  396</span>    uint8_t res = 0;        <span class="comment">// 返回值</span></div>
<div class="line"><a id="l00397" name="l00397"></a><span class="lineno">  397</span>    uint32_t file_size = 0; <span class="comment">// 文件实际大小</span></div>
<div class="line"><a id="l00398" name="l00398"></a><span class="lineno">  398</span>    uint32_t read_len = 0;  <span class="comment">// 读字节数</span></div>
<div class="line"><a id="l00399" name="l00399"></a><span class="lineno">  399</span>    uint32_t header = 0;    <span class="comment">// Bin 文件头</span></div>
<div class="line"><a id="l00400" name="l00400"></a><span class="lineno">  400</span>    <span class="keywordtype">void</span> *mem_ptr = NULL;   <span class="comment">// 待分配内存块地址</span></div>
<div class="line"><a id="l00401" name="l00401"></a><span class="lineno">  401</span> </div>
<div class="line"><a id="l00402" name="l00402"></a><span class="lineno">  402</span>    lv_img_dsc_t *img = (lv_img_dsc_t *)image;</div>
<div class="line"><a id="l00403" name="l00403"></a><span class="lineno">  403</span> </div>
<div class="line"><a id="l00404" name="l00404"></a><span class="lineno">  404</span>    <span class="keywordflow">if</span> (NULL == src_path || NULL == image || NULL == ram_malloc)</div>
<div class="line"><a id="l00405" name="l00405"></a><span class="lineno">  405</span>    {</div>
<div class="line"><a id="l00406" name="l00406"></a><span class="lineno">  406</span>        <a class="code hl_define" href="load__file_8c.html#a0a33935978fc635f5c600379478f7881">LF_LOG</a>(<span class="stringliteral">&quot;[Assert] : [Path] = [%s], [Image] = [%s], [Callback] = [%s]\r\n&quot;</span>,</div>
<div class="line"><a id="l00407" name="l00407"></a><span class="lineno">  407</span>               (NULL == src_path) ? <span class="stringliteral">&quot;no exist&quot;</span> : src_path,</div>
<div class="line"><a id="l00408" name="l00408"></a><span class="lineno">  408</span>               (NULL == image) ? <span class="stringliteral">&quot;no image&quot;</span> : <span class="stringliteral">&quot;image&quot;</span>,</div>
<div class="line"><a id="l00409" name="l00409"></a><span class="lineno">  409</span>               (NULL == ram_malloc) ? <span class="stringliteral">&quot;no ram_malloc&quot;</span> : <span class="stringliteral">&quot;ram_malloc&quot;</span>);</div>
<div class="line"><a id="l00410" name="l00410"></a><span class="lineno">  410</span>        <span class="keywordflow">return</span> 1; <span class="comment">// Assert</span></div>
<div class="line"><a id="l00411" name="l00411"></a><span class="lineno">  411</span>    }</div>
<div class="line"><a id="l00412" name="l00412"></a><span class="lineno">  412</span> </div>
<div class="line"><a id="l00413" name="l00413"></a><span class="lineno">  413</span>    res = f_open(&amp;file, src_path, FA_READ | FA_OPEN_EXISTING);</div>
<div class="line"><a id="l00414" name="l00414"></a><span class="lineno">  414</span>    <span class="keywordflow">if</span> (FR_OK != res)</div>
<div class="line"><a id="l00415" name="l00415"></a><span class="lineno">  415</span>    {</div>
<div class="line"><a id="l00416" name="l00416"></a><span class="lineno">  416</span>        <a class="code hl_define" href="load__file_8c.html#a0a33935978fc635f5c600379478f7881">LF_LOG</a>(<span class="stringliteral">&quot;[%s] file [f_open] = [%s]\r\n&quot;</span>, src_path, <a class="code hl_variable" href="load__file_8c.html#a158fc3faa30ddbece4360f3114710212">Debug_FR_Table</a>[res]);</div>
<div class="line"><a id="l00417" name="l00417"></a><span class="lineno">  417</span>        <span class="keywordflow">return</span> res;</div>
<div class="line"><a id="l00418" name="l00418"></a><span class="lineno">  418</span>    }</div>
<div class="line"><a id="l00419" name="l00419"></a><span class="lineno">  419</span>    <span class="comment">// 获取文件大小</span></div>
<div class="line"><a id="l00420" name="l00420"></a><span class="lineno">  420</span>    file_size = f_size(&amp;file);</div>
<div class="line"><a id="l00421" name="l00421"></a><span class="lineno">  421</span> </div>
<div class="line"><a id="l00422" name="l00422"></a><span class="lineno">  422</span>    f_lseek(&amp;file, 0); <span class="comment">// 文件光标定位至开头</span></div>
<div class="line"><a id="l00423" name="l00423"></a><span class="lineno">  423</span> </div>
<div class="line"><a id="l00424" name="l00424"></a><span class="lineno">  424</span>    <span class="keywordflow">if</span> (NULL != strstr(src_path, <span class="stringliteral">&quot;.jpg&quot;</span>)) <span class="comment">/* 文件格式为 JPEG */</span></div>
<div class="line"><a id="l00425" name="l00425"></a><span class="lineno">  425</span>    {</div>
<div class="line"><a id="l00426" name="l00426"></a><span class="lineno">  426</span>        <span class="keywordflow">while</span> (<a class="code hl_function" href="dev__jpeg_8c.html#a1cbc17a98f22c1c19a7d33c85a14fccd">jpeg_decode_isbusy</a>() != 0)</div>
<div class="line"><a id="l00427" name="l00427"></a><span class="lineno">  427</span>            ; <span class="comment">// 检查解码器是否空闲, 避免 JPEG 正解码 JPEG_Decoder_Buff 区域时, f_read()读取改变 JPEG_Decoder_Buff, 可加上互斥锁保护</span></div>
<div class="line"><a id="l00428" name="l00428"></a><span class="lineno">  428</span> </div>
<div class="line"><a id="l00429" name="l00429"></a><span class="lineno">  429</span>        res = f_read(&amp;file, <a class="code hl_variable" href="dev__jpeg_8c.html#a134ecf44573e0f7204be01b09c1e48bb">JPEG_Decoder_Buff</a>, file_size, &amp;read_len);</div>
<div class="line"><a id="l00430" name="l00430"></a><span class="lineno">  430</span>        <span class="keywordflow">if</span> (FR_OK != res || read_len == 0)</div>
<div class="line"><a id="l00431" name="l00431"></a><span class="lineno">  431</span>        {</div>
<div class="line"><a id="l00432" name="l00432"></a><span class="lineno">  432</span>            <a class="code hl_define" href="load__file_8c.html#a0a33935978fc635f5c600379478f7881">LF_LOG</a>(<span class="stringliteral">&quot;[%s] file [read_len] = [%d], result = [%s]\r\n&quot;</span>, src_path, read_len, <a class="code hl_variable" href="load__file_8c.html#a158fc3faa30ddbece4360f3114710212">Debug_FR_Table</a>[res]);</div>
<div class="line"><a id="l00433" name="l00433"></a><span class="lineno">  433</span>            res = (FR_OK != res) ? 2 : res;</div>
<div class="line"><a id="l00434" name="l00434"></a><span class="lineno">  434</span>            <span class="keywordflow">goto</span> close_image_file;</div>
<div class="line"><a id="l00435" name="l00435"></a><span class="lineno">  435</span>        }</div>
<div class="line"><a id="l00436" name="l00436"></a><span class="lineno">  436</span>        <span class="comment">// 进行 JPEG 硬件解码, 阻塞确保图像信息生成完整</span></div>
<div class="line"><a id="l00437" name="l00437"></a><span class="lineno">  437</span>        mem_ptr = <a class="code hl_function" href="dev__jpeg_8c.html#ac0e9fc8534c961b9dbba6ad4b8e8b61e">jpeg_decode</a>(<a class="code hl_variable" href="dev__jpeg_8c.html#a134ecf44573e0f7204be01b09c1e48bb">JPEG_Decoder_Buff</a>, read_len, NULL, ram_malloc, 1);</div>
<div class="line"><a id="l00438" name="l00438"></a><span class="lineno">  438</span>        <span class="keywordflow">if</span> (NULL == mem_ptr)</div>
<div class="line"><a id="l00439" name="l00439"></a><span class="lineno">  439</span>        {</div>
<div class="line"><a id="l00440" name="l00440"></a><span class="lineno">  440</span>            <a class="code hl_define" href="load__file_8c.html#a0a33935978fc635f5c600379478f7881">LF_LOG</a>(<span class="stringliteral">&quot;[%s] file [malloc] size = [%d]\r\n&quot;</span>, src_path, read_len);</div>
<div class="line"><a id="l00441" name="l00441"></a><span class="lineno">  441</span>            res = 3;</div>
<div class="line"><a id="l00442" name="l00442"></a><span class="lineno">  442</span>            <span class="keywordflow">goto</span> close_image_file;</div>
<div class="line"><a id="l00443" name="l00443"></a><span class="lineno">  443</span>        }</div>
<div class="line"><a id="l00444" name="l00444"></a><span class="lineno">  444</span> </div>
<div class="line"><a id="l00445" name="l00445"></a><span class="lineno">  445</span>        img-&gt;header.cf = LV_IMG_CF_TRUE_COLOR; <span class="comment">// 真彩色 RGB</span></div>
<div class="line"><a id="l00446" name="l00446"></a><span class="lineno">  446</span>        img-&gt;header.always_zero = 0;</div>
<div class="line"><a id="l00447" name="l00447"></a><span class="lineno">  447</span>        img-&gt;header.w = <a class="code hl_variable" href="jfif__parser_8c.html#ad5869f8e3b141200c34cb4541329a8b2">JFIF_Info</a>.Width;</div>
<div class="line"><a id="l00448" name="l00448"></a><span class="lineno">  448</span>        img-&gt;header.h = <a class="code hl_variable" href="jfif__parser_8c.html#ad5869f8e3b141200c34cb4541329a8b2">JFIF_Info</a>.Height;</div>
<div class="line"><a id="l00449" name="l00449"></a><span class="lineno">  449</span>        img-&gt;data_size = (img-&gt;header.w) * (img-&gt;header.h) * <a class="code hl_define" href="version_8h.html#ae3f7a8bd03ba0b575f7ece837aab91aa">LCD_FMT</a>; <span class="comment">// JFIF_Info.CodeLen 不可用 (缺失信息)</span></div>
<div class="line"><a id="l00450" name="l00450"></a><span class="lineno">  450</span>        img-&gt;data = (<span class="keyword">const</span> uint8_t *)mem_ptr;                         <span class="comment">// 赋予图片源地址</span></div>
<div class="line"><a id="l00451" name="l00451"></a><span class="lineno">  451</span>    }</div>
<div class="line"><a id="l00452" name="l00452"></a><span class="lineno">  452</span>    <span class="keywordflow">else</span> <span class="keywordflow">if</span> (NULL != strstr(src_path, <span class="stringliteral">&quot;.bin&quot;</span>)) <span class="comment">/* 文件格式 BIN (由lvgl图片转换工具生成, 附带文件头), 默认是 PNG 图片, PNG 图片会进行 map_blended , LV_COLOR_16_SWAP 正常生效*/</span></div>
<div class="line"><a id="l00453" name="l00453"></a><span class="lineno">  453</span>    {</div>
<div class="line"><a id="l00454" name="l00454"></a><span class="lineno">  454</span>        res = f_read(&amp;file, &amp;header, 4, &amp;read_len); <span class="comment">// 读取文件头信息</span></div>
<div class="line"><a id="l00455" name="l00455"></a><span class="lineno">  455</span>        <span class="keywordflow">if</span> (FR_OK != res || read_len &lt; 4)</div>
<div class="line"><a id="l00456" name="l00456"></a><span class="lineno">  456</span>        {</div>
<div class="line"><a id="l00457" name="l00457"></a><span class="lineno">  457</span>            <a class="code hl_define" href="load__file_8c.html#a0a33935978fc635f5c600379478f7881">LF_LOG</a>(<span class="stringliteral">&quot;[%s] file [read_len] = [%d], result = [%s]\r\n&quot;</span>, src_path, read_len, <a class="code hl_variable" href="load__file_8c.html#a158fc3faa30ddbece4360f3114710212">Debug_FR_Table</a>[res]);</div>
<div class="line"><a id="l00458" name="l00458"></a><span class="lineno">  458</span>            res = (FR_OK != res) ? 4 : res;</div>
<div class="line"><a id="l00459" name="l00459"></a><span class="lineno">  459</span>            <span class="keywordflow">goto</span> close_image_file;</div>
<div class="line"><a id="l00460" name="l00460"></a><span class="lineno">  460</span>        }</div>
<div class="line"><a id="l00461" name="l00461"></a><span class="lineno">  461</span>        <span class="comment">// 图片bin文件为4字节图片结构体 + rgb数据</span></div>
<div class="line"><a id="l00462" name="l00462"></a><span class="lineno">  462</span>        img-&gt;header.cf = header &amp; 0x1F;</div>
<div class="line"><a id="l00463" name="l00463"></a><span class="lineno">  463</span>        img-&gt;header.always_zero = 0;</div>
<div class="line"><a id="l00464" name="l00464"></a><span class="lineno">  464</span>        img-&gt;header.w = (uint16_t)(header &gt;&gt; 10) &amp; 0x7FF;</div>
<div class="line"><a id="l00465" name="l00465"></a><span class="lineno">  465</span>        img-&gt;header.h = (uint16_t)(header &gt;&gt; 21);</div>
<div class="line"><a id="l00466" name="l00466"></a><span class="lineno">  466</span>        img-&gt;data_size = file_size - 4;; <span class="comment">// 去掉4字节的头,剩余的就是图片数据流长度</span></div>
<div class="line"><a id="l00467" name="l00467"></a><span class="lineno">  467</span> </div>
<div class="line"><a id="l00468" name="l00468"></a><span class="lineno">  468</span>        mem_ptr = ram_malloc(img-&gt;data_size); <span class="comment">// 分配可用空间</span></div>
<div class="line"><a id="l00469" name="l00469"></a><span class="lineno">  469</span>        <span class="keywordflow">if</span> (NULL == mem_ptr)</div>
<div class="line"><a id="l00470" name="l00470"></a><span class="lineno">  470</span>        {</div>
<div class="line"><a id="l00471" name="l00471"></a><span class="lineno">  471</span>            <a class="code hl_define" href="load__file_8c.html#a0a33935978fc635f5c600379478f7881">LF_LOG</a>(<span class="stringliteral">&quot;[%s] file [malloc] size = [%d]\r\n&quot;</span>, src_path, img-&gt;data_size);</div>
<div class="line"><a id="l00472" name="l00472"></a><span class="lineno">  472</span>            res = 5;</div>
<div class="line"><a id="l00473" name="l00473"></a><span class="lineno">  473</span>            <span class="keywordflow">goto</span> close_image_file;</div>
<div class="line"><a id="l00474" name="l00474"></a><span class="lineno">  474</span>        }</div>
<div class="line"><a id="l00475" name="l00475"></a><span class="lineno">  475</span>        img-&gt;data = (<span class="keyword">const</span> uint8_t *)mem_ptr; <span class="comment">// 赋予图片源地址</span></div>
<div class="line"><a id="l00476" name="l00476"></a><span class="lineno">  476</span> </div>
<div class="line"><a id="l00477" name="l00477"></a><span class="lineno">  477</span>        <span class="comment">// LF_LOG(&quot;header:0X%X\r\n&quot;,header);</span></div>
<div class="line"><a id="l00478" name="l00478"></a><span class="lineno">  478</span>        <span class="comment">// LF_LOG(&quot;width:%d height:%d\r\n&quot;, (uint16_t)(header &gt;&gt; 10) &amp; 0x7ff, header &gt;&gt; 21);</span></div>
<div class="line"><a id="l00479" name="l00479"></a><span class="lineno">  479</span> </div>
<div class="line"><a id="l00480" name="l00480"></a><span class="lineno">  480</span>        <span class="comment">// 开始拷贝</span></div>
<div class="line"><a id="l00481" name="l00481"></a><span class="lineno">  481</span>        <span class="keywordflow">for</span> (i = 0; i &lt; img-&gt;data_size; i += read_len)</div>
<div class="line"><a id="l00482" name="l00482"></a><span class="lineno">  482</span>        {</div>
<div class="line"><a id="l00483" name="l00483"></a><span class="lineno">  483</span>            res = f_read(&amp;file, (<span class="keywordtype">void</span> *)(((uint32_t)mem_ptr) + i), <a class="code hl_define" href="load__file_8c.html#aa64097d14226626e813464d4b1db74fe">RW_CACHE_SIZE</a>, &amp;read_len); <span class="comment">// Flash 直接读取至 SDRAM</span></div>
<div class="line"><a id="l00484" name="l00484"></a><span class="lineno">  484</span>            <span class="keywordflow">if</span> (FR_OK != res)</div>
<div class="line"><a id="l00485" name="l00485"></a><span class="lineno">  485</span>            {</div>
<div class="line"><a id="l00486" name="l00486"></a><span class="lineno">  486</span>                <a class="code hl_define" href="load__file_8c.html#a0a33935978fc635f5c600379478f7881">LF_LOG</a>(<span class="stringliteral">&quot;[%s] file [read_len] = [%d], result = [%s]\r\n&quot;</span>, src_path, read_len, <a class="code hl_variable" href="load__file_8c.html#a158fc3faa30ddbece4360f3114710212">Debug_FR_Table</a>[res]);</div>
<div class="line"><a id="l00487" name="l00487"></a><span class="lineno">  487</span>                <span class="keywordflow">goto</span> close_image_file;</div>
<div class="line"><a id="l00488" name="l00488"></a><span class="lineno">  488</span>            }</div>
<div class="line"><a id="l00489" name="l00489"></a><span class="lineno">  489</span>        }</div>
<div class="line"><a id="l00490" name="l00490"></a><span class="lineno">  490</span>    }</div>
<div class="line"><a id="l00491" name="l00491"></a><span class="lineno">  491</span>    <span class="keywordflow">else</span> <span class="comment">// unknown</span></div>
<div class="line"><a id="l00492" name="l00492"></a><span class="lineno">  492</span>    {</div>
<div class="line"><a id="l00493" name="l00493"></a><span class="lineno">  493</span>        <a class="code hl_define" href="load__file_8c.html#a0a33935978fc635f5c600379478f7881">LF_LOG</a>(<span class="stringliteral">&quot;[%s] file isn&#39;t [image]\r\n&quot;</span>, (NULL == src_path) ? <span class="stringliteral">&quot;no exist&quot;</span> : src_path);</div>
<div class="line"><a id="l00494" name="l00494"></a><span class="lineno">  494</span>    }</div>
<div class="line"><a id="l00495" name="l00495"></a><span class="lineno">  495</span>    <a class="code hl_define" href="load__file_8c.html#a0a33935978fc635f5c600379478f7881">LF_LOG</a>(<span class="stringliteral">&quot;[%s] image save [SDRAM] in [0x%p] to [0x%x], size = [%d]\r\n&quot;</span>,</div>
<div class="line"><a id="l00496" name="l00496"></a><span class="lineno">  496</span>           src_path, img-&gt;data, ((uint32_t)(img-&gt;data)) + (img-&gt;data_size), img-&gt;data_size);</div>
<div class="line"><a id="l00497" name="l00497"></a><span class="lineno">  497</span> </div>
<div class="line"><a id="l00498" name="l00498"></a><span class="lineno">  498</span>close_image_file:</div>
<div class="line"><a id="l00499" name="l00499"></a><span class="lineno">  499</span>    f_close(&amp;file);</div>
<div class="line"><a id="l00500" name="l00500"></a><span class="lineno">  500</span>    <span class="keywordflow">return</span> res;</div>
<div class="line"><a id="l00501" name="l00501"></a><span class="lineno">  501</span>}</div>
<div class="line"><a id="l00502" name="l00502"></a><span class="lineno">  502</span> </div>
<div class="line"><a id="l00512" name="l00512"></a><span class="lineno"><a class="line" href="load__file_8c.html#af9dfd7a83175e3852794ad0cc1feffc3">  512</a></span><span class="keyword">static</span> uint8_t <a class="code hl_function" href="load__file_8c.html#af9dfd7a83175e3852794ad0cc1feffc3">load_to_sdram_bin</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *src_path, <span class="keywordtype">void</span> *bin, <span class="keywordtype">void</span> *(*ram_malloc)(<span class="keywordtype">size_t</span>))</div>
<div class="line"><a id="l00513" name="l00513"></a><span class="lineno">  513</span>{</div>
<div class="line"><a id="l00514" name="l00514"></a><span class="lineno">  514</span>    uint32_t i = 0;</div>
<div class="line"><a id="l00515" name="l00515"></a><span class="lineno">  515</span>    FIL file;               <span class="comment">// 文件句柄</span></div>
<div class="line"><a id="l00516" name="l00516"></a><span class="lineno">  516</span>    uint8_t res = 0;        <span class="comment">// 返回值</span></div>
<div class="line"><a id="l00517" name="l00517"></a><span class="lineno">  517</span>    uint32_t file_size = 0; <span class="comment">// 文件实际大小</span></div>
<div class="line"><a id="l00518" name="l00518"></a><span class="lineno">  518</span>    uint32_t read_len = 0;  <span class="comment">// 读字节数</span></div>
<div class="line"><a id="l00519" name="l00519"></a><span class="lineno">  519</span>    <span class="keywordtype">void</span> *mem_ptr = NULL;   <span class="comment">// 待分配内存块地址</span></div>
<div class="line"><a id="l00520" name="l00520"></a><span class="lineno">  520</span> </div>
<div class="line"><a id="l00521" name="l00521"></a><span class="lineno">  521</span>    <span class="keywordflow">if</span> (NULL == bin || NULL == ram_malloc)</div>
<div class="line"><a id="l00522" name="l00522"></a><span class="lineno">  522</span>    {</div>
<div class="line"><a id="l00523" name="l00523"></a><span class="lineno">  523</span>        <a class="code hl_define" href="load__file_8c.html#a0a33935978fc635f5c600379478f7881">LF_LOG</a>(<span class="stringliteral">&quot;[Assert] : [Bin] = [%s], [Callback] = [%s]\r\n&quot;</span>,</div>
<div class="line"><a id="l00524" name="l00524"></a><span class="lineno">  524</span>               (NULL == bin) ? <span class="stringliteral">&quot;no bin&quot;</span> : <span class="stringliteral">&quot;bin&quot;</span>,</div>
<div class="line"><a id="l00525" name="l00525"></a><span class="lineno">  525</span>               (NULL == ram_malloc) ? <span class="stringliteral">&quot;no ram_malloc&quot;</span> : <span class="stringliteral">&quot;ram_malloc&quot;</span>);</div>
<div class="line"><a id="l00526" name="l00526"></a><span class="lineno">  526</span>        <span class="keywordflow">return</span> 1;</div>
<div class="line"><a id="l00527" name="l00527"></a><span class="lineno">  527</span>    }</div>
<div class="line"><a id="l00528" name="l00528"></a><span class="lineno">  528</span> </div>
<div class="line"><a id="l00529" name="l00529"></a><span class="lineno">  529</span>    <span class="keywordflow">if</span> (NULL == strstr(src_path, <span class="stringliteral">&quot;.bin&quot;</span>)) <span class="comment">// 判断文件格式是否为 bin</span></div>
<div class="line"><a id="l00530" name="l00530"></a><span class="lineno">  530</span>    {</div>
<div class="line"><a id="l00531" name="l00531"></a><span class="lineno">  531</span>        <a class="code hl_define" href="load__file_8c.html#a0a33935978fc635f5c600379478f7881">LF_LOG</a>(<span class="stringliteral">&quot;[%s] file isn&#39;t [bin]\r\n&quot;</span>, (NULL == src_path) ? <span class="stringliteral">&quot;no exist&quot;</span> : src_path);</div>
<div class="line"><a id="l00532" name="l00532"></a><span class="lineno">  532</span>        <span class="keywordflow">return</span> 2;</div>
<div class="line"><a id="l00533" name="l00533"></a><span class="lineno">  533</span>    }</div>
<div class="line"><a id="l00534" name="l00534"></a><span class="lineno">  534</span> </div>
<div class="line"><a id="l00535" name="l00535"></a><span class="lineno">  535</span>    res = f_open(&amp;file, src_path, FA_READ | FA_OPEN_EXISTING);</div>
<div class="line"><a id="l00536" name="l00536"></a><span class="lineno">  536</span>    <span class="keywordflow">if</span> (FR_OK != res)</div>
<div class="line"><a id="l00537" name="l00537"></a><span class="lineno">  537</span>    {</div>
<div class="line"><a id="l00538" name="l00538"></a><span class="lineno">  538</span>        <a class="code hl_define" href="load__file_8c.html#a0a33935978fc635f5c600379478f7881">LF_LOG</a>(<span class="stringliteral">&quot;[%s] file [f_open] = [%s]\r\n&quot;</span>, src_path, <a class="code hl_variable" href="load__file_8c.html#a158fc3faa30ddbece4360f3114710212">Debug_FR_Table</a>[res]);</div>
<div class="line"><a id="l00539" name="l00539"></a><span class="lineno">  539</span>        <span class="keywordflow">return</span> res;</div>
<div class="line"><a id="l00540" name="l00540"></a><span class="lineno">  540</span>    }</div>
<div class="line"><a id="l00541" name="l00541"></a><span class="lineno">  541</span>    file_size = f_size(&amp;file);       <span class="comment">// 获取文件大小</span></div>
<div class="line"><a id="l00542" name="l00542"></a><span class="lineno">  542</span>    mem_ptr = ram_malloc(file_size); <span class="comment">// 分配可用空间</span></div>
<div class="line"><a id="l00543" name="l00543"></a><span class="lineno">  543</span>    <span class="keywordflow">if</span> (NULL == mem_ptr)</div>
<div class="line"><a id="l00544" name="l00544"></a><span class="lineno">  544</span>    {</div>
<div class="line"><a id="l00545" name="l00545"></a><span class="lineno">  545</span>        <a class="code hl_define" href="load__file_8c.html#a0a33935978fc635f5c600379478f7881">LF_LOG</a>(<span class="stringliteral">&quot;[%s] file [malloc] size = [%d]\r\n&quot;</span>, src_path, file_size);</div>
<div class="line"><a id="l00546" name="l00546"></a><span class="lineno">  546</span>        f_close(&amp;file);</div>
<div class="line"><a id="l00547" name="l00547"></a><span class="lineno">  547</span>        <span class="keywordflow">return</span> 3;</div>
<div class="line"><a id="l00548" name="l00548"></a><span class="lineno">  548</span>    }</div>
<div class="line"><a id="l00549" name="l00549"></a><span class="lineno">  549</span>    <span class="comment">// 文件光标定位至开头</span></div>
<div class="line"><a id="l00550" name="l00550"></a><span class="lineno">  550</span>    f_lseek(&amp;file, 0);</div>
<div class="line"><a id="l00551" name="l00551"></a><span class="lineno">  551</span> </div>
<div class="line"><a id="l00552" name="l00552"></a><span class="lineno">  552</span>    <span class="comment">// 开始拷贝</span></div>
<div class="line"><a id="l00553" name="l00553"></a><span class="lineno">  553</span>    <span class="keywordflow">for</span> (i = 0; i &lt; file_size; i += read_len)</div>
<div class="line"><a id="l00554" name="l00554"></a><span class="lineno">  554</span>    {</div>
<div class="line"><a id="l00555" name="l00555"></a><span class="lineno">  555</span>        res = f_read(&amp;file, (<span class="keywordtype">void</span> *)(((uint32_t)mem_ptr) + i), <a class="code hl_define" href="load__file_8c.html#aa64097d14226626e813464d4b1db74fe">RW_CACHE_SIZE</a>, &amp;read_len); <span class="comment">// Flash 直接读取至 SDRAM</span></div>
<div class="line"><a id="l00556" name="l00556"></a><span class="lineno">  556</span>        <span class="keywordflow">if</span> (FR_OK != res)</div>
<div class="line"><a id="l00557" name="l00557"></a><span class="lineno">  557</span>        {</div>
<div class="line"><a id="l00558" name="l00558"></a><span class="lineno">  558</span>            <a class="code hl_define" href="load__file_8c.html#a0a33935978fc635f5c600379478f7881">LF_LOG</a>(<span class="stringliteral">&quot;[%s] file [read_len] = [%d], result = [%s]\r\n&quot;</span>, src_path, read_len, <a class="code hl_variable" href="load__file_8c.html#a158fc3faa30ddbece4360f3114710212">Debug_FR_Table</a>[res]);</div>
<div class="line"><a id="l00559" name="l00559"></a><span class="lineno">  559</span>            <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l00560" name="l00560"></a><span class="lineno">  560</span>        }</div>
<div class="line"><a id="l00561" name="l00561"></a><span class="lineno">  561</span>    }</div>
<div class="line"><a id="l00562" name="l00562"></a><span class="lineno">  562</span>    <span class="comment">// 仅实现字库(*.bin)</span></div>
<div class="line"><a id="l00563" name="l00563"></a><span class="lineno">  563</span>    *((uint32_t *)bin) = (uint32_t)mem_ptr; <span class="comment">// 表明字库存放区域</span></div>
<div class="line"><a id="l00564" name="l00564"></a><span class="lineno">  564</span> </div>
<div class="line"><a id="l00565" name="l00565"></a><span class="lineno">  565</span>    <a class="code hl_define" href="load__file_8c.html#a0a33935978fc635f5c600379478f7881">LF_LOG</a>(<span class="stringliteral">&quot;[%s] file save [SDRAM] in [0x%x] to [0x%x], size = [%d]\r\n&quot;</span>,</div>
<div class="line"><a id="l00566" name="l00566"></a><span class="lineno">  566</span>           src_path, (uint32_t)mem_ptr, ((uint32_t)mem_ptr) + file_size, file_size);</div>
<div class="line"><a id="l00567" name="l00567"></a><span class="lineno">  567</span> </div>
<div class="line"><a id="l00568" name="l00568"></a><span class="lineno">  568</span>    f_close(&amp;file);</div>
<div class="line"><a id="l00569" name="l00569"></a><span class="lineno">  569</span>    <span class="keywordflow">return</span> res;</div>
<div class="line"><a id="l00570" name="l00570"></a><span class="lineno">  570</span>}</div>
<div class="line"><a id="l00571" name="l00571"></a><span class="lineno">  571</span> </div>
<div class="line"><a id="l00572" name="l00572"></a><span class="lineno">  572</span><span class="preprocessor">#if 0 </span><span class="comment">/* 目前无必要加载音频至 SDRAM */</span><span class="preprocessor"></span></div>
<div class="line"><a id="l00582" name="l00582"></a><span class="lineno">  582</span><span class="keyword">static</span> uint8_t load_to_sdram_music(<span class="keyword">const</span> <span class="keywordtype">char</span> *src_path, <span class="keywordtype">void</span> *music, <span class="keywordtype">void</span> *(*ram_malloc)(<span class="keywordtype">size_t</span>))</div>
<div class="line"><a id="l00583" name="l00583"></a><span class="lineno">  583</span>{</div>
<div class="line"><a id="l00584" name="l00584"></a><span class="lineno">  584</span>    uint32_t i = 0;</div>
<div class="line"><a id="l00585" name="l00585"></a><span class="lineno">  585</span>    FIL file;                <span class="comment">//文件句柄</span></div>
<div class="line"><a id="l00586" name="l00586"></a><span class="lineno">  586</span>    FRESULT res = FR_OK;     <span class="comment">//返回值</span></div>
<div class="line"><a id="l00587" name="l00587"></a><span class="lineno">  587</span>    uint32_t file_size = 0;  <span class="comment">//文件实际大小</span></div>
<div class="line"><a id="l00588" name="l00588"></a><span class="lineno">  588</span>    uint32_t read_len = 0;   <span class="comment">//读字节数</span></div>
<div class="line"><a id="l00589" name="l00589"></a><span class="lineno">  589</span>    uint16_t temp_buff[256]; <span class="comment">//数据缓冲</span></div>
<div class="line"><a id="l00590" name="l00590"></a><span class="lineno">  590</span>    <span class="keywordtype">void</span> *mem_ptr = NULL;    <span class="comment">//待分配内存块地址</span></div>
<div class="line"><a id="l00591" name="l00591"></a><span class="lineno">  591</span> </div>
<div class="line"><a id="l00592" name="l00592"></a><span class="lineno">  592</span>    <span class="keywordflow">if</span> (NULL == music || NULL == ram_malloc)</div>
<div class="line"><a id="l00593" name="l00593"></a><span class="lineno">  593</span>    {</div>
<div class="line"><a id="l00594" name="l00594"></a><span class="lineno">  594</span>        <a class="code hl_define" href="load__file_8c.html#a0a33935978fc635f5c600379478f7881">LF_LOG</a>(<span class="stringliteral">&quot;[Assert] : [Music] = [%s], [Callback] = [%s]\r\n&quot;</span>,</div>
<div class="line"><a id="l00595" name="l00595"></a><span class="lineno">  595</span>        (NULL == music) ? <span class="stringliteral">&quot;no music&quot;</span> : <span class="stringliteral">&quot;music&quot;</span>,</div>
<div class="line"><a id="l00596" name="l00596"></a><span class="lineno">  596</span>        (NULL == ram_malloc) ? <span class="stringliteral">&quot;no ram_malloc&quot;</span> : <span class="stringliteral">&quot;ram_malloc&quot;</span>);</div>
<div class="line"><a id="l00597" name="l00597"></a><span class="lineno">  597</span>        <span class="keywordflow">return</span> 1;</div>
<div class="line"><a id="l00598" name="l00598"></a><span class="lineno">  598</span>    }</div>
<div class="line"><a id="l00599" name="l00599"></a><span class="lineno">  599</span> </div>
<div class="line"><a id="l00600" name="l00600"></a><span class="lineno">  600</span>    <span class="keywordflow">if</span> (NULL == strstr(src_path, <span class="stringliteral">&quot;.wav&quot;</span>)) <span class="comment">//判断文件格式是否为 wav</span></div>
<div class="line"><a id="l00601" name="l00601"></a><span class="lineno">  601</span>    {</div>
<div class="line"><a id="l00602" name="l00602"></a><span class="lineno">  602</span>        <a class="code hl_define" href="load__file_8c.html#a0a33935978fc635f5c600379478f7881">LF_LOG</a>(<span class="stringliteral">&quot;[%s] file isn&#39;t [wav]\r\n&quot;</span>, (NULL == src_path) ? <span class="stringliteral">&quot;no exist&quot;</span> : src_path);</div>
<div class="line"><a id="l00603" name="l00603"></a><span class="lineno">  603</span>        <span class="keywordflow">return</span> 2;</div>
<div class="line"><a id="l00604" name="l00604"></a><span class="lineno">  604</span>    }</div>
<div class="line"><a id="l00605" name="l00605"></a><span class="lineno">  605</span> </div>
<div class="line"><a id="l00606" name="l00606"></a><span class="lineno">  606</span>    res = f_open(&amp;file, src_path, FA_READ | FA_OPEN_EXISTING);</div>
<div class="line"><a id="l00607" name="l00607"></a><span class="lineno">  607</span>    <span class="keywordflow">if</span> (FR_OK != res)</div>
<div class="line"><a id="l00608" name="l00608"></a><span class="lineno">  608</span>    {</div>
<div class="line"><a id="l00609" name="l00609"></a><span class="lineno">  609</span>        <a class="code hl_define" href="load__file_8c.html#a0a33935978fc635f5c600379478f7881">LF_LOG</a>(<span class="stringliteral">&quot;[%s] file [f_open] = [%s]\r\n&quot;</span>, src_path, <a class="code hl_variable" href="load__file_8c.html#a158fc3faa30ddbece4360f3114710212">Debug_FR_Table</a>[res]);</div>
<div class="line"><a id="l00610" name="l00610"></a><span class="lineno">  610</span>        <span class="keywordflow">return</span> res;</div>
<div class="line"><a id="l00611" name="l00611"></a><span class="lineno">  611</span>    }</div>
<div class="line"><a id="l00612" name="l00612"></a><span class="lineno">  612</span> </div>
<div class="line"><a id="l00613" name="l00613"></a><span class="lineno">  613</span>    file_size = f_size(&amp;file); <span class="comment">//获取文件大小</span></div>
<div class="line"><a id="l00614" name="l00614"></a><span class="lineno">  614</span> </div>
<div class="line"><a id="l00615" name="l00615"></a><span class="lineno">  615</span>    <span class="comment">//读取 wav 文件头</span></div>
<div class="line"><a id="l00616" name="l00616"></a><span class="lineno">  616</span>    res = f_read(&amp;file, temp_buff, 512 <span class="comment">/*sizeof(wav_head_buf)*/</span>, &amp;read_len); <span class="comment">//读取 512 字节头数据</span></div>
<div class="line"><a id="l00617" name="l00617"></a><span class="lineno">  617</span>    <span class="keywordflow">if</span> (FR_OK != res || 0 == read_len)</div>
<div class="line"><a id="l00618" name="l00618"></a><span class="lineno">  618</span>    {</div>
<div class="line"><a id="l00619" name="l00619"></a><span class="lineno">  619</span>        <a class="code hl_define" href="load__file_8c.html#a0a33935978fc635f5c600379478f7881">LF_LOG</a>(<span class="stringliteral">&quot;[%s] file [wav_head] read_size = [%d], result = [%s]\r\n&quot;</span>, src_path, read_len, <a class="code hl_variable" href="load__file_8c.html#a158fc3faa30ddbece4360f3114710212">Debug_FR_Table</a>[res]);</div>
<div class="line"><a id="l00620" name="l00620"></a><span class="lineno">  620</span>        res = (FR_OK != res) ? 3 : res;</div>
<div class="line"><a id="l00621" name="l00621"></a><span class="lineno">  621</span>        <span class="keywordflow">goto</span> close_music_file;</div>
<div class="line"><a id="l00622" name="l00622"></a><span class="lineno">  622</span>    }</div>
<div class="line"><a id="l00623" name="l00623"></a><span class="lineno">  623</span>    <span class="comment">//对文件头进行解析</span></div>
<div class="line"><a id="l00624" name="l00624"></a><span class="lineno">  624</span>    res = <a class="code hl_function" href="wav__parser_8c.html#acc10199929987de81dc6d395c39832c0">wav_init</a>((uint8_t *)temp_buff, read_len);</div>
<div class="line"><a id="l00625" name="l00625"></a><span class="lineno">  625</span>    <span class="keywordflow">if</span> (0 != res)</div>
<div class="line"><a id="l00626" name="l00626"></a><span class="lineno">  626</span>    {</div>
<div class="line"><a id="l00627" name="l00627"></a><span class="lineno">  627</span>        <a class="code hl_define" href="load__file_8c.html#a0a33935978fc635f5c600379478f7881">LF_LOG</a>(<span class="stringliteral">&quot;[%s] file [wav_init] result = [%s]\r\n&quot;</span>, src_path, <a class="code hl_variable" href="load__file_8c.html#a158fc3faa30ddbece4360f3114710212">Debug_FR_Table</a>[res]);</div>
<div class="line"><a id="l00628" name="l00628"></a><span class="lineno">  628</span>        <span class="keywordflow">goto</span> close_music_file;</div>
<div class="line"><a id="l00629" name="l00629"></a><span class="lineno">  629</span>    }</div>
<div class="line"><a id="l00630" name="l00630"></a><span class="lineno">  630</span>    f_lseek(&amp;file, <a class="code hl_variable" href="wav__parser_8c.html#aac71309979edec17487770ba9f4650a6">Wavx</a>.<a class="code hl_variable" href="struct_w_a_v___i_n_f_o.html#ad724f0361ba01c7bfb66c62592612538">datastart</a>); <span class="comment">//跳过文件头</span></div>
<div class="line"><a id="l00631" name="l00631"></a><span class="lineno">  631</span>    file_size -= <a class="code hl_variable" href="wav__parser_8c.html#aac71309979edec17487770ba9f4650a6">Wavx</a>.<a class="code hl_variable" href="struct_w_a_v___i_n_f_o.html#ad724f0361ba01c7bfb66c62592612538">datastart</a>;</div>
<div class="line"><a id="l00632" name="l00632"></a><span class="lineno">  632</span> </div>
<div class="line"><a id="l00633" name="l00633"></a><span class="lineno">  633</span>    <span class="comment">/*  若想加载完成至 SDRAM 须使得 void *music 可记忆以下信息</span></div>
<div class="line"><a id="l00634" name="l00634"></a><span class="lineno">  634</span><span class="comment">        音频数据起始地址</span></div>
<div class="line"><a id="l00635" name="l00635"></a><span class="lineno">  635</span><span class="comment">        音频数据大小</span></div>
<div class="line"><a id="l00636" name="l00636"></a><span class="lineno">  636</span><span class="comment">        采样率</span></div>
<div class="line"><a id="l00637" name="l00637"></a><span class="lineno">  637</span><span class="comment">    */</span></div>
<div class="line"><a id="l00638" name="l00638"></a><span class="lineno">  638</span>    mem_ptr = ram_malloc(file_size); <span class="comment">//分配可用空间</span></div>
<div class="line"><a id="l00639" name="l00639"></a><span class="lineno">  639</span>    <span class="keywordflow">if</span> (NULL == mem_ptr)</div>
<div class="line"><a id="l00640" name="l00640"></a><span class="lineno">  640</span>    {</div>
<div class="line"><a id="l00641" name="l00641"></a><span class="lineno">  641</span>        <a class="code hl_define" href="load__file_8c.html#a0a33935978fc635f5c600379478f7881">LF_LOG</a>(<span class="stringliteral">&quot;[%s] file [malloc] size = [%d]\r\n&quot;</span>, src_path, file_size);</div>
<div class="line"><a id="l00642" name="l00642"></a><span class="lineno">  642</span>        res = 4;</div>
<div class="line"><a id="l00643" name="l00643"></a><span class="lineno">  643</span>        <span class="keywordflow">goto</span> close_music_file;</div>
<div class="line"><a id="l00644" name="l00644"></a><span class="lineno">  644</span>    }</div>
<div class="line"><a id="l00645" name="l00645"></a><span class="lineno">  645</span> </div>
<div class="line"><a id="l00646" name="l00646"></a><span class="lineno">  646</span>    <span class="comment">//开始拷贝</span></div>
<div class="line"><a id="l00647" name="l00647"></a><span class="lineno">  647</span>    <span class="keywordflow">for</span> (i = 0; i &lt; file_size; i += read_len)</div>
<div class="line"><a id="l00648" name="l00648"></a><span class="lineno">  648</span>    {</div>
<div class="line"><a id="l00649" name="l00649"></a><span class="lineno">  649</span>        res = f_read(&amp;file, (<span class="keywordtype">void</span> *)(((uint32_t)mem_ptr) + i), <a class="code hl_define" href="load__file_8c.html#aa64097d14226626e813464d4b1db74fe">RW_CACHE_SIZE</a>, &amp;read_len); <span class="comment">// Flash 直接读取至 SDRAM</span></div>
<div class="line"><a id="l00650" name="l00650"></a><span class="lineno">  650</span>        <span class="keywordflow">if</span> (FR_OK != res)</div>
<div class="line"><a id="l00651" name="l00651"></a><span class="lineno">  651</span>        {</div>
<div class="line"><a id="l00652" name="l00652"></a><span class="lineno">  652</span>            <a class="code hl_define" href="load__file_8c.html#a0a33935978fc635f5c600379478f7881">LF_LOG</a>(<span class="stringliteral">&quot;[%s] file [read_len] = [%d], result = [%s]\r\n&quot;</span>, src_path, read_len, <a class="code hl_variable" href="load__file_8c.html#a158fc3faa30ddbece4360f3114710212">Debug_FR_Table</a>[res]);</div>
<div class="line"><a id="l00653" name="l00653"></a><span class="lineno">  653</span>            <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l00654" name="l00654"></a><span class="lineno">  654</span>        }</div>
<div class="line"><a id="l00655" name="l00655"></a><span class="lineno">  655</span>    }</div>
<div class="line"><a id="l00656" name="l00656"></a><span class="lineno">  656</span>    <a class="code hl_define" href="load__file_8c.html#a0a33935978fc635f5c600379478f7881">LF_LOG</a>(<span class="stringliteral">&quot;[%s] file save [SDRAM] in [0x%x] to [0x%x], size = [%d]\r\n&quot;</span>,</div>
<div class="line"><a id="l00657" name="l00657"></a><span class="lineno">  657</span>           src_path, (uint32_t)mem_ptr, ((uint32_t)mem_ptr) + file_size, file_size);</div>
<div class="line"><a id="l00658" name="l00658"></a><span class="lineno">  658</span> </div>
<div class="line"><a id="l00659" name="l00659"></a><span class="lineno">  659</span>close_music_file:</div>
<div class="line"><a id="l00660" name="l00660"></a><span class="lineno">  660</span>    f_close(&amp;file);</div>
<div class="line"><a id="l00661" name="l00661"></a><span class="lineno">  661</span>    <span class="keywordflow">return</span> res;</div>
<div class="line"><a id="l00662" name="l00662"></a><span class="lineno">  662</span>}</div>
<div class="line"><a id="l00663" name="l00663"></a><span class="lineno">  663</span><span class="preprocessor">#endif</span></div>
<div class="ttc" id="adev__jpeg_8c_html_a134ecf44573e0f7204be01b09c1e48bb"><div class="ttname"><a href="dev__jpeg_8c.html#a134ecf44573e0f7204be01b09c1e48bb">JPEG_Decoder_Buff</a></div><div class="ttdeci">uint8_t JPEG_Decoder_Buff[512 *1024]</div><div class="ttdoc">使用 JPEG 解码需要一块缓冲区, 大小视图片文件大小决定, 不能小于最大的那张 JPEG 图的大小, 只有在理论极坏情况下会接近原图大小, 因为 JPEG 编码利用人类视觉系统对色彩/高频的不敏感特...</div><div class="ttdef"><b>Definition:</b> <a href="dev__jpeg_8c_source.html#l00034">dev_jpeg.c:35</a></div></div>
<div class="ttc" id="adev__jpeg_8c_html_a1cbc17a98f22c1c19a7d33c85a14fccd"><div class="ttname"><a href="dev__jpeg_8c.html#a1cbc17a98f22c1c19a7d33c85a14fccd">jpeg_decode_isbusy</a></div><div class="ttdeci">uint8_t jpeg_decode_isbusy(void)</div><div class="ttdoc">JPEG 硬件解码忙查询</div><div class="ttdef"><b>Definition:</b> <a href="dev__jpeg_8c_source.html#l00057">dev_jpeg.c:57</a></div></div>
<div class="ttc" id="adev__jpeg_8c_html_ac0e9fc8534c961b9dbba6ad4b8e8b61e"><div class="ttname"><a href="dev__jpeg_8c.html#ac0e9fc8534c961b9dbba6ad4b8e8b61e">jpeg_decode</a></div><div class="ttdeci">void * jpeg_decode(const void *buff, const uint32_t size, const jpeg_outset_t *jpeg_outset, void *(*ram_malloc)(size_t size), const uint8_t wait)</div><div class="ttdoc">JPEG 硬件解码</div><div class="ttdef"><b>Definition:</b> <a href="dev__jpeg_8c_source.html#l00085">dev_jpeg.c:85</a></div></div>
<div class="ttc" id="adev__jpeg_8h_html"><div class="ttname"><a href="dev__jpeg_8h.html">dev_jpeg.h</a></div><div class="ttdoc">JPEG 硬件解码</div></div>
<div class="ttc" id="ajfif__parser_8c_html_ad5869f8e3b141200c34cb4541329a8b2"><div class="ttname"><a href="jfif__parser_8c.html#ad5869f8e3b141200c34cb4541329a8b2">JFIF_Info</a></div><div class="ttdeci">jfif_info_t JFIF_Info</div><div class="ttdoc">JFIF 格式解析信息</div><div class="ttdef"><b>Definition:</b> <a href="jfif__parser_8c_source.html#l00025">jfif_parser.c:25</a></div></div>
<div class="ttc" id="aload__file_8c_html_a0180524d8dc0203e0b918e5834f69542"><div class="ttname"><a href="load__file_8c.html#a0180524d8dc0203e0b918e5834f69542">Volume_Work</a></div><div class="ttdeci">static char Volume_Work[FF_MAX_SS]</div><div class="ttdoc">磁盘新建卷工作区占用 RAM 太高, 仅支持一个磁盘同时进行新加卷.</div><div class="ttdef"><b>Definition:</b> <a href="load__file_8c_source.html#l00094">load_file.c:94</a></div></div>
<div class="ttc" id="aload__file_8c_html_a054ac4b07b339f1cda65d041546a46f2"><div class="ttname"><a href="load__file_8c.html#a054ac4b07b339f1cda65d041546a46f2">copy_file</a></div><div class="ttdeci">uint8_t copy_file(const char *src_path, const char *dst_path)</div><div class="ttdoc">拷贝文件</div><div class="ttdef"><b>Definition:</b> <a href="load__file_8c_source.html#l00180">load_file.c:180</a></div></div>
<div class="ttc" id="aload__file_8c_html_a08687ba7285d01a737a269b697bb661c"><div class="ttname"><a href="load__file_8c.html#a08687ba7285d01a737a269b697bb661c">VolumeStr</a></div><div class="ttdeci">const char *const VolumeStr[FF_VOLUMES]</div><div class="ttdoc">User defied volume ID (详见 ffconf.h 内的 &quot;FF_STR_VOLUME_ID&quot; &quot;FF_VOLUME_STRS&quot; )</div><div class="ttdef"><b>Definition:</b> <a href="load__file_8c_source.html#l00108">load_file.c:108</a></div></div>
<div class="ttc" id="aload__file_8c_html_a0a33935978fc635f5c600379478f7881"><div class="ttname"><a href="load__file_8c.html#a0a33935978fc635f5c600379478f7881">LF_LOG</a></div><div class="ttdeci">#define LF_LOG(...)</div><div class="ttdoc">模块调试日志打印宏</div><div class="ttdef"><b>Definition:</b> <a href="load__file_8c_source.html#l00048">load_file.c:48</a></div></div>
<div class="ttc" id="aload__file_8c_html_a158fc3faa30ddbece4360f3114710212"><div class="ttname"><a href="load__file_8c.html#a158fc3faa30ddbece4360f3114710212">Debug_FR_Table</a></div><div class="ttdeci">static const char * Debug_FR_Table[]</div><div class="ttdoc">FATFS 文件系统 Debug 表</div><div class="ttdef"><b>Definition:</b> <a href="load__file_8c_source.html#l00061">load_file.c:61</a></div></div>
<div class="ttc" id="aload__file_8c_html_a19787671d1d62339e0cf53a1b1f7ab98"><div class="ttname"><a href="load__file_8c.html#a19787671d1d62339e0cf53a1b1f7ab98">load_to_sdram_image</a></div><div class="ttdeci">static uint8_t load_to_sdram_image(const char *src_path, void *image, void *(*ram_malloc)(size_t))</div><div class="ttdoc">加载图片信息至 SDRAM 内</div><div class="ttdef"><b>Definition:</b> <a href="load__file_8c_source.html#l00392">load_file.c:392</a></div></div>
<div class="ttc" id="aload__file_8c_html_a2826c976bae07983300096521da284b4"><div class="ttname"><a href="load__file_8c.html#a2826c976bae07983300096521da284b4">fs_unmount</a></div><div class="ttdeci">uint8_t fs_unmount(disk_t disk)</div><div class="ttdoc">为磁盘卸载文件系统</div><div class="ttdef"><b>Definition:</b> <a href="load__file_8c_source.html#l00150">load_file.c:150</a></div></div>
<div class="ttc" id="aload__file_8c_html_a2efc2116dbabe389a95c812f9dc6aa03"><div class="ttname"><a href="load__file_8c.html#a2efc2116dbabe389a95c812f9dc6aa03">load_source_to_sdram</a></div><div class="ttdeci">uint8_t load_source_to_sdram(disk_t disk, const char *path, resource_t type, void *res_struct, void *(*ram_malloc)(size_t))</div><div class="ttdoc">加载资源至 SDRAM 内</div><div class="ttdef"><b>Definition:</b> <a href="load__file_8c_source.html#l00289">load_file.c:289</a></div></div>
<div class="ttc" id="aload__file_8c_html_a51d572edecc93d80a160b93843fb5208"><div class="ttname"><a href="load__file_8c.html#a51d572edecc93d80a160b93843fb5208">fs_mkfs</a></div><div class="ttdeci">uint8_t fs_mkfs(disk_t disk)</div><div class="ttdoc">磁盘新建卷, 重置清空卷</div><div class="ttdef"><b>Definition:</b> <a href="load__file_8c_source.html#l00162">load_file.c:162</a></div></div>
<div class="ttc" id="aload__file_8c_html_a62a6b593e3ff4f0f2c1b13773df449b0"><div class="ttname"><a href="load__file_8c.html#a62a6b593e3ff4f0f2c1b13773df449b0">remove_source_to_sdram</a></div><div class="ttdeci">uint8_t remove_source_to_sdram(resource_t type, void *source, uint8_t(*ram_free)(void *))</div><div class="ttdoc">销毁位于 SDRAM 内的资源</div><div class="ttdef"><b>Definition:</b> <a href="load__file_8c_source.html#l00332">load_file.c:332</a></div></div>
<div class="ttc" id="aload__file_8c_html_a8d34823bdbc6f49b3a7829f9161936e5"><div class="ttname"><a href="load__file_8c.html#a8d34823bdbc6f49b3a7829f9161936e5">FatFs_Obj</a></div><div class="ttdeci">static FATFS FatFs_Obj[FF_VOLUMES]</div><div class="ttdoc">FileSystem Object Structure 占用 RAM 很高, 用户可根据自身实际功能进行缩减(min &gt;= 2).</div><div class="ttdef"><b>Definition:</b> <a href="load__file_8c_source.html#l00091">load_file.c:91</a></div></div>
<div class="ttc" id="aload__file_8c_html_aa64097d14226626e813464d4b1db74fe"><div class="ttname"><a href="load__file_8c.html#aa64097d14226626e813464d4b1db74fe">RW_CACHE_SIZE</a></div><div class="ttdeci">#define RW_CACHE_SIZE</div><div class="ttdoc">单次读写缓存大小 / Bytes(在栈上分配)</div><div class="ttdef"><b>Definition:</b> <a href="load__file_8c_source.html#l00055">load_file.c:55</a></div></div>
<div class="ttc" id="aload__file_8c_html_aebe4a0d647831986c734e1788150a064"><div class="ttname"><a href="load__file_8c.html#aebe4a0d647831986c734e1788150a064">fs_mount</a></div><div class="ttdeci">uint8_t fs_mount(disk_t disk)</div><div class="ttdoc">为磁盘挂载文件系统</div><div class="ttdef"><b>Definition:</b> <a href="load__file_8c_source.html#l00128">load_file.c:128</a></div></div>
<div class="ttc" id="aload__file_8c_html_af9dfd7a83175e3852794ad0cc1feffc3"><div class="ttname"><a href="load__file_8c.html#af9dfd7a83175e3852794ad0cc1feffc3">load_to_sdram_bin</a></div><div class="ttdeci">static uint8_t load_to_sdram_bin(const char *src_path, void *bin, void *(*ram_malloc)(size_t))</div><div class="ttdoc">加载二进制数据至 SDRAM 内</div><div class="ttdef"><b>Definition:</b> <a href="load__file_8c_source.html#l00512">load_file.c:512</a></div></div>
<div class="ttc" id="aload__file_8h_html"><div class="ttname"><a href="load__file_8h.html">load_file.h</a></div><div class="ttdoc">加载/拷贝文件</div></div>
<div class="ttc" id="aload__file_8h_html_a044f73b36811553cd877767a7df11f83"><div class="ttname"><a href="load__file_8h.html#a044f73b36811553cd877767a7df11f83">resource_t</a></div><div class="ttdeci">resource_t</div><div class="ttdoc">资源类型</div><div class="ttdef"><b>Definition:</b> <a href="load__file_8h_source.html#l00048">load_file.h:49</a></div></div>
<div class="ttc" id="aload__file_8h_html_a044f73b36811553cd877767a7df11f83a1e00c983d4be44226a3b1ba10382e3e9"><div class="ttname"><a href="load__file_8h.html#a044f73b36811553cd877767a7df11f83a1e00c983d4be44226a3b1ba10382e3e9">IMG</a></div><div class="ttdeci">@ IMG</div><div class="ttdoc">jpg 图 / 通过 PC 端工具转换图片生成的 bin</div><div class="ttdef"><b>Definition:</b> <a href="load__file_8h_source.html#l00050">load_file.h:50</a></div></div>
<div class="ttc" id="aload__file_8h_html_a044f73b36811553cd877767a7df11f83a2db6506cbb3a11215ddceb3db9c4502b"><div class="ttname"><a href="load__file_8h.html#a044f73b36811553cd877767a7df11f83a2db6506cbb3a11215ddceb3db9c4502b">AVI</a></div><div class="ttdeci">@ AVI</div><div class="ttdoc">avi 格式视频</div><div class="ttdef"><b>Definition:</b> <a href="load__file_8h_source.html#l00053">load_file.h:53</a></div></div>
<div class="ttc" id="aload__file_8h_html_a044f73b36811553cd877767a7df11f83a3dba92f17ebb0d7efe6056d51e9acdc7"><div class="ttname"><a href="load__file_8h.html#a044f73b36811553cd877767a7df11f83a3dba92f17ebb0d7efe6056d51e9acdc7">BIN</a></div><div class="ttdeci">@ BIN</div><div class="ttdoc">其他 bin 文件(目前仅实现字库)</div><div class="ttdef"><b>Definition:</b> <a href="load__file_8h_source.html#l00051">load_file.h:51</a></div></div>
<div class="ttc" id="aload__file_8h_html_a044f73b36811553cd877767a7df11f83ab22456aa73d7862a07ffbc9117324f3e"><div class="ttname"><a href="load__file_8h.html#a044f73b36811553cd877767a7df11f83ab22456aa73d7862a07ffbc9117324f3e">WAV</a></div><div class="ttdeci">@ WAV</div><div class="ttdoc">wav 格式音频</div><div class="ttdef"><b>Definition:</b> <a href="load__file_8h_source.html#l00052">load_file.h:52</a></div></div>
<div class="ttc" id="aload__file_8h_html_a44edb5dd69763758dda6af4dd162c997"><div class="ttname"><a href="load__file_8h.html#a44edb5dd69763758dda6af4dd162c997">disk_t</a></div><div class="ttdeci">disk_t</div><div class="ttdoc">磁盘类型</div><div class="ttdef"><b>Definition:</b> <a href="load__file_8h_source.html#l00040">load_file.h:41</a></div></div>
<div class="ttc" id="alog_8h_html"><div class="ttname"><a href="log_8h.html">log.h</a></div><div class="ttdoc">日志打印/用户提示(告警)</div></div>
<div class="ttc" id="astruct_w_a_v___i_n_f_o_html_ad724f0361ba01c7bfb66c62592612538"><div class="ttname"><a href="struct_w_a_v___i_n_f_o.html#ad724f0361ba01c7bfb66c62592612538">WAV_INFO::datastart</a></div><div class="ttdeci">uint32_t datastart</div><div class="ttdoc">数据帧开始的位置(在文件里面的偏移)</div><div class="ttdef"><b>Definition:</b> <a href="wav__parser_8h_source.html#l00090">wav_parser.h:90</a></div></div>
<div class="ttc" id="aversion_8h_html_ae3f7a8bd03ba0b575f7ece837aab91aa"><div class="ttname"><a href="version_8h.html#ae3f7a8bd03ba0b575f7ece837aab91aa">LCD_FMT</a></div><div class="ttdeci">#define LCD_FMT</div><div class="ttdoc">enum : LCD 显示格式(LCD_FORMAT) 其值为一个像素点所占用的字节数, 可使用该值结合分辨率计算一帧显示缓存的大小</div><div class="ttdef"><b>Definition:</b> <a href="version_8h_source.html#l00246">version.h:246</a></div></div>
<div class="ttc" id="awav__parser_8c_html_aac71309979edec17487770ba9f4650a6"><div class="ttname"><a href="wav__parser_8c.html#aac71309979edec17487770ba9f4650a6">Wavx</a></div><div class="ttdeci">WAV_INFO Wavx</div><div class="ttdoc">WAV 音频流信息</div><div class="ttdef"><b>Definition:</b> <a href="wav__parser_8c_source.html#l00035">wav_parser.c:35</a></div></div>
<div class="ttc" id="awav__parser_8c_html_acc10199929987de81dc6d395c39832c0"><div class="ttname"><a href="wav__parser_8c.html#acc10199929987de81dc6d395c39832c0">wav_init</a></div><div class="ttdeci">int32_t wav_init(uint8_t *buf, uint32_t len)</div><div class="ttdoc">wav 音频解析</div><div class="ttdef"><b>Definition:</b> <a href="wav__parser_8c_source.html#l00045">wav_parser.c:45</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
制作者&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.5
</small></address>
</body>
</html>
